在C ++中将对象传递给另一个类的构造函数时遇到问题

时间:2011-10-07 01:15:27

标签: c++

我不能为我的生活解决为什么这不起作用...无法编译,不断收到错误“没有匹配函数来调用'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;}

仍然没有骰子。我做错了什么?

2 个答案:

答案 0 :(得分:8)

changeDuty(Duty original) {Original = original;}

这第一个默认构造Original,然后重新分配它。但是没有默认构造函数,所以这是一个错误。你想要的是:

changeDuty(Duty original) : Original(original) {}

复制构造Original

答案 1 :(得分:2)

您需要添加默认构造函数。空的会做:

Duty();

既然你这样做了:

Duty Original;

编译器需要能够使用不带参数的构造函数构造Duty对象。