【问题标题】:c++ when working with class containing vectors - candidate expects 2 arguments, 0 providedc++ 使用包含向量的类时 - 候选人需要 2 个参数,提供 0
【发布时间】: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

标签: c++ class vector


【解决方案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 的指针” 这当然是您可以就该主题给出的最糟糕的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-20
  • 2012-02-11
  • 2014-11-22
  • 1970-01-01
  • 2018-10-17
  • 2017-09-15
  • 1970-01-01
相关资源
最近更新 更多