dan*_*ani 1 c++ initialization class
我读到了在类中初始化的引用和对象.但是,除了提示外,我无法找到以下问题的明确声明:
obj1如果初始化列表中没有默认构造函数(no Object(){}),我可以初始化它吗?
class Sample
{
private:
Object1 obj1(arguments);
public:
Sample(Object1 o1) : obj1( o1(arguments) )
{ }
};
Run Code Online (Sandbox Code Playgroud)
问题出现了,因为如果遇到与此相关的问题如何在构造函数中初始化C++对象成员变量?.代码也从那里获取.谢谢你的努力.
丹尼尔
编辑:
由于答案表明它有效,测试返回错误(这正是我提出这个问题的原因):
../src/Timestep.h:45:12: error: field ‘myFEMSolver’ has incomplete type FEMSolver myFEMSolver;
Run Code Online (Sandbox Code Playgroud)
码:
class Timestep {
public:
Timestep();
private:
FEMSolver myFEMSolver;
}
Timestep::Timestep() : myFEMSolver(*this)
{ //do some stuff
}
FEMSolver::FEMSolver(const Timestep& theTimestep) : myTimestep(theTimestep)
{ //do some stuff
}
main(){
Timestep myTimestep();
}
Run Code Online (Sandbox Code Playgroud)
obj1如果初始化列表中没有默认构造函数(noObject(){}),我可以初始化它吗?
是.事实上,你必须这样做.
class Sample
{
private:
Object1 obj1;
public:
Sample() : obj1( /* ctor args */ )
{
}
};
Run Code Online (Sandbox Code Playgroud)
如果您将另一个传递Object1给Sample构造函数,并将其传递给Object1复制构造函数,那么您可能希望通过引用传递它:
Sample(const Object1& o) : obj1(o)
{
}
Run Code Online (Sandbox Code Playgroud)
如果Object1没有无参数构造函数,并且您没有obj1在初始化程序列表中初始化,则会出现编译错误.