c++ 使用包含向量的类时 - 候选人需要 2 个参数,提供 0
Posted
技术标签:
【中文标题】c++ 使用包含向量的类时 - 候选人需要 2 个参数,提供 0【英文标题】:c++ when working with class containing vectors - candidate expects 2 arguments, 0 provided 【发布时间】:2020-09-24 21:57:40 【问题描述】:class myItem
int key;
string name;
public:
// Constructor
myItem(int key, string name)
key = key;
name = name;
;
class myCollection
vector<myItem> col;
public:
void insert(myItem &i);
void print();
;
int main()
myCollection c;
int key;
string name;
cin >> key;
cin >> name;
myItem i = myItem(key, name);
c.insert(i);
c.print();
当我尝试编译它时,我收到错误:没有匹配函数调用‘myItem::myItem()’并注意:候选:myItem::myItem(int, std::string)。候选人需要 2 个参数,提供 0 个。我该如何解决这个问题?谢谢!
【问题讨论】:
void insert(&i);
不是有效的类成员函数声明。
您的代码发出了大量的other error messages,但不是您声称的那个。
该错误发生在哪一行?代码中没有这样的调用。
无法重现,问题已编辑,请参阅:wandbox.org/permlink/LSSM2dzGD64p5Yg3
【参考方案1】:
首先,我不喜欢用相似的名字混淆编译器。这是一种糟糕的做法(而且我不是 java this.local = param 的粉丝)
即使你可以争论编译器知道什么是正确的,维护你的代码的人也不会。因此,如果您不想重命名,您至少可以大写或充分和下划线或其他内容(有时我看到在它前面加上 in,如 inKey、inName 作为我都赞成的替代方法,下划线是如果您不想让名称更改突出显示,那很好,只需确保下划线不在变量/参数名称前面):
int key;
string name;
public:
// Constructor
myItem(int key_, string name_) : key(key_), name(name_)
继续前进,我没有收到您的错误,但我确实收到了未解决的外部问题。问题是 myCollection 已定义,但未实现(或者说它的方法未实现)。使用 尝试空占位符。
class myCollection
vector<myItem> col;
public:
void insert(myItem &i)
void print()
;
这应该可以解决您的错误。
【讨论】:
@πάντα ῥεῖ 我喜欢你的内联初始化,我不想让他的代码复杂化,因为我认为她是初学者。我也会编辑文本以反映下划线,我承认在这里它们可能是更好的选择。 我只是想更正代码格式文本中失败的**
粗体说明符,但是,如果我能做到的话。我还考虑过构造函数初始化器列表可能会进一步混淆 OP,因此您可能再次将其更改回来是正确的。【参考方案2】:
您的构造函数名为 Team
而不是 myItem
替换为
myItem(int key, string name)
key = key;
name = name;
【讨论】:
抱歉,我在编辑代码时出错了 - 我的构造函数名为 myItem【参考方案3】:您在 myCollection 中使用的向量在内部使用默认构造函数。尝试在向量中使用 myItem 的指针,或者也指定默认构造函数和复制构造函数。
【讨论】:
请参阅push_back vs emplace_back..“尝试在向量中使用 myItem 的指针” 这当然是您可以就该主题给出的最糟糕的建议。以上是关于c++ 使用包含向量的类时 - 候选人需要 2 个参数,提供 0的主要内容,如果未能解决你的问题,请参考以下文章