没有默认构造函数的成员对象的初始化列表

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)

Typ*_*eIA 6

obj1如果初始化列表中没有默认构造函数(no Object(){}),我可以初始化它吗?

是.事实上,你必须这样做.

class Sample
{
    private:

        Object1 obj1;

    public:

        Sample() : obj1( /* ctor args */ )
        {
        }
};
Run Code Online (Sandbox Code Playgroud)

如果您将另一个传递Object1Sample构造函数,并将其传递给Object1复制构造函数,那么您可能希望通过引用传递它:

Sample(const Object1& o) : obj1(o)
{
}
Run Code Online (Sandbox Code Playgroud)

如果Object1没有无参数构造函数,并且您没有obj1在初始化程序列表中初始化,则会出现编译错误.