我不能为我的生活解决为什么这不起作用...无法编译,不断收到错误“没有匹配函数来调用'Duty :: Duty()'”这条线用于changeDuty构造函数。我认为它认为我正在试图召唤一个Duty类构造函数?但我只想传递一个Duty类对象!
class Duty
{
string Chore;
string Member;
public:
Duty(string dutyInfo);
Duty(string chore, string member) {Chore = chore; Member = member;}
};
class changeDuty
{
Duty Original;
public:
changeDuty(Duty original) {Original = original;}
};
在仔细阅读类似问题后,我尝试使用
changeDuty(Duty& original) {Original = original;}
和
changeDuty(const Duty& original) {Original = original;}
仍然没有骰子。我做错了什么?
答案 0 :(得分:8)
changeDuty(Duty original) {Original = original;}
这第一个默认构造Original
,然后重新分配它。但是没有默认构造函数,所以这是一个错误。你想要的是:
changeDuty(Duty original) : Original(original) {}
复制构造Original
。
答案 1 :(得分:2)
您需要添加默认构造函数。空的会做:
Duty();
既然你这样做了:
Duty Original;
编译器需要能够使用不带参数的构造函数构造Duty
对象。