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(&amp;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的主要内容,如果未能解决你的问题,请参考以下文章

(EffectiveJava3rd条目一).静态工厂的第5个优点是,在编写包含该方法的类时,返回的对象的类不需要存在。

如何将文件存储到包含 C++ 中的类对象的向量中?

当我在 C++ 中的类中使用类时收到警告 [关闭]

C++的vector学习

我应该使用简单的类还是高维矩阵?

如何让一个向量接受具有相同基类的 2 个不同的类?