我有2个类,一个类从抽象类继承它的参数:
class Child : public Base {
public:
Child(string s, int i, ) : Base(s, i){};
... // methods
};
和另一个有两个重载的构造函数,一个使用普通参数,另一个使用相同的参数,但是来自第一个类'已经存在的对象:
头文件:
class Other {
private:
string s;
int i;
Child o;
public:
Other(string str, int num);
Other(Child ob);
};
cpp文件:
Other :: Other(string str, int num) : s(str), i(num) {/* this is where the error happens*/};
Other :: Other(Child ob) : o(ob) {
};
但是当我尝试编译时,我在标记的地方出现错误“C2512'其他':没有合适的默认构造函数可用”
可能是什么问题?我真的需要将该对象传递给构造函数
答案 0 :(得分:2)
下面:
Other :: Other(string str, int num) : s(str), i(num)
您需要构造子对象:
Other :: Other(string str, int num) : s(str), i(num), o(str, num ) {}
答案 1 :(得分:1)
你没有Child::Child()
。由于您未在错误行的初始值设定项列表中列出o
,因此会调用Child::Child()
。当没有其他构造函数时,将自动添加此空构造函数。鉴于您有Child::Child(string s, int i)
,编译器将不会自动创建Child::Child()
。
答案 2 :(得分:0)
这是因为Other
有Child
成员,但您没有给Child
默认构造函数(不带参数的构造函数)。由于Child
没有默认构造函数,因此编译器不知道如何创建Child
的实例,因此您必须告诉它。
Other :: Other(string str, int num) : s(str), i(num), o(some_value_of_type_Child) {};
答案 3 :(得分:0)
我只是在这里猜测,但我怀疑Other
构造函数采用字符串和整数应该使用这些参数来构造Child
对象。
然后你应该做这样的事情:
Other:: Other(string str, int num) : o(str, num) {}
当然,从s
类中删除i
和Other
成员变量。