c++在处理包含向量的类时,candidate需要2个参数,但提供了0
c++ when working with class containing vectors - candidate expects 2 arguments, 0 provided
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的指针,或者指定默认构造函数和复制构造函数。
相关文章:
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 在不传递参数数量且只有3个点的情况下,如何使用变差函数
- 带有多个独立参数的C++For循环
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 具有多个转换的模板参数推导
- 具有两个间接寻址运算符 (C++) 的函数参数的用途
- 如何将可变参数模板转换为多个单个模板?(C++竞争编程调试模板)
- 如何允许模板参数中的类类型,仅当它有两个基类时
- c++ 构造函数 将 1 个字符串参数转换为 3 个属性
- 运算符重载:"operator+"必须采用零个或一个参数
- C++部分概念 id:显式模板规范顺序/第一个参数的特殊状态的原因是什么?
- 为什么 c++11 std::lock 和 std::scoped_lock 至少需要 2 个参数?
- 具有多个参数的模板化类专用化,其中一个模板参数是模板本身
- 我应该如何在没有变量的情况下将相同的参数传递给 CMAKE 中的多个目标?
- C++如果两个模板函数都与参数列表匹配,将调用哪个模板
- 如何实现具有多个平台__FILE__和__LINE__信息的 C/C++ 可变参数日志记录宏?
- 如何从两个不同的函数传递参数
- 为什么C CHAR数据类型3D数组通过参数第一个括号为空白
- 什么时候使用size_t作为模板函数的参数是个坏主意
- 警告:正在传递第1个参数(共个)..从不带强制转换的整数生成指针