gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 00:51:14 26 4
gpt4 key购买 nike

我阅读了有关在类中初始化的引用和对象的内容。但是,除了提示之外,我找不到对以下问题的明确说明:

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

class Sample
{
private:
Object1 obj1(arguments);
public:
Sample(Object1 o1) : obj1( o1(arguments) )
{ }
};

问题出现了,因为如果有与此相关的问题 How can I initialize C++ object member variables in the constructor? .代码也是从那里获取的。感谢您的努力。

丹尼尔

编辑:

由于答案表明它有效,测试返回错误(这正是我问这个问题的原因):

../src/Timestep.h:45:12: error: field ‘myFEMSolver’ has incomplete type FEMSolver myFEMSolver;

代码:

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();
}

最佳答案

Can I initialise a member object obj1 in an initialisation list if it doesn't have a default constructor (no Object(){})?

是的。事实上,您必须这样做。

class Sample
{
private:

Object1 obj1;

public:

Sample() : obj1( /* ctor args */ )
{
}
};

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

Sample(const Object1& o) : obj1(o)
{
}

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

关于c++ - 没有默认构造函数的成员对象的初始化列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22643514/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com