如何将对象作为另一个类构造函数的参数传递?

时间:2016-12-11 20:09:39

标签: c++ oop constructor

我有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'其他':没有合适的默认构造函数可用”

可能是什么问题?我真的需要将该对象传递给构造函数

4 个答案:

答案 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)

这是因为OtherChild成员,但您没有给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类中删除iOther成员变量。