c++在处理包含向量的类时,candidate需要2个参数,但提供了0

c++ when working with class containing vectors - candidate expects 2 arguments, 0 provided

本文关键字:参数 2个 需要 candidate 向量 包含 处理 c++      更新时间:2024-04-27
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((",并注意:candidate:myItem::myItem(int,std::string(。候选者需要2个参数,但提供了0。我该怎么解决这个问题?谢谢

首先,我不喜欢用类似的名称混淆编译器。这是一种糟糕的做法(我不喜欢javaThis.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() {}
};

这将修复您的错误。

您的构造函数名为Team,而不是myItem

更换为

myItem(int key, string name)
{
key = key;
name = name;
}

您在myCollection中使用的向量在内部使用默认构造函数。请尝试在向量中使用myItem的指针,或者指定默认构造函数和复制构造函数。