gpt4 book ai didi

c++ - 将类初始化为结构体成员

转载 作者:行者123 更新时间:2023-12-02 03:17:46 30 4
gpt4 key购买 nike

我正在尝试创建一个内部包含结构成员的类:

.h 文件:

class A
{
public:

struct Result
{
int x;
UGraph G; <------ class definition
};
Result m_tempStructResult;

A:A(void);
void function();
}

.cpp 文件

A::A()
{

}

void A::function()
{
UGraph Graph(10); <---- object has to receive a value

...
//manipulations on Graph
...

m_tempStructResult.G = Graph;
}

我得到的编译错误是:

error C2512: 'A::Result' : no appropriate default constructor available

所以我猜问题是缺少默认构造函数,所以我添加了这个:

struct Result
{
Result::Result(int graph_size=0) : G(graph_size){
}

int x;
UGraph G;
};

问题解决了。

我的问题是是否有另一种方法可以在类 A 的构造函数中启动类 UGraph G ?而不是在其成员结构内部?

谢谢。

最佳答案

是的,在 Result 的构造函数中使用初始值设定项列表:

Result::Result() : G(0)  // you have to insert some integer here
{

}

C++11 中的另一种方法是在类中为其指定默认值:

struct Result
{
UGraph G = UGraph(10);
};

有关小型演示,请参阅here .

<小时/>

编辑感谢@OthmanBenchekroun,我终于相信我理解了这个问题:

这是另一个示例代码,它使用 aggregate initialization为了初始化 Result 的成员(不更改后者的构造函数)。

struct G
{
G(int) {}
};

struct Result
{
int x;
G g;
};

struct A
{
A() : m_tempStructResult{1, G(1)} {}

Result m_tempStructResult;
};

int main()
{
A{};
}

另一个演示 here .

但这并不意味着我会建议这样做。相反,我会给 Result 一个适当的默认构造函数。否则,它可能会变得无法使用。

关于c++ - 将类初始化为结构体成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30757038/

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