我是C ++的新手,但我之前在PHP和C#(OOP)方面有过编程经验。 我拥有的是:两个类,其中一个类具有另一个类的私有属性。 来源:
class Foo
{
public:
Foo(int n)
{
}
};
class Bar
{
private:
Foo foo;
public:
Bar()
{
this->foo = Foo(10);
}
};
Bar bars[123];
我要做的是在Foo
中使用构造函数声明Bar
的属性。不幸的是,我这样做的方式不起作用。它给出了一系列错误,例如:
没有匹配函数来调用'Foo :: Foo()'
我如何让它运作? 谢谢你的回复。
答案 0 :(得分:4)
您需要在member initialization list中正确初始化Foo
,如下所示:
class Bar
{
private:
Foo foo;
public:
Bar() :
foo(10)
{}
};
否则,会发生的情况是编译器首先尝试使用默认构造函数初始化this->foo
,然后才能进入构造函数体。由于Foo
没有,因此无法编译。