我有一个班级" A"和一个班级" B"这样A包含B
的实例class A
{
B b = B(parameters...);
Other thing = 3;
}
这段代码的问题在于B没有(也不应该!)有一个复制构造函数,所以编译器抱怨了
我希望能够像下面这样调用B&#39的构造函数,但它将其解释为函数声明
class A
{
B b(parameters...);
Other thing = 3;
}
有没有办法在类的定义中调用非默认构造函数?
答案 0 :(得分:2)
Default member initializer(因为C ++ 11)只支持大括号或等于初始化器;你可以在这里使用大括号初始化器。
class A
{
B b{parameters...};
Other thing = 3;
};
答案 1 :(得分:1)
如果您需要使复制构造函数不可见,可以将其设为private
Class B
{
public:
B(parameters...){};
private:
B(B b){};
}
至于你的代码,我认为你的问题是你需要像这样在A的构造函数中启动成员:
class A
{
A()
: B(parameters...)
{
thing = 3;
}
B b;
Other thing;
}