将类作为struct的成员启动

use*_*206 2 c++

我正在尝试创建一个带有struct成员的类:

.h文件:

class A
{
 public:

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

 A:A(void);
 void function();
}
Run Code Online (Sandbox Code Playgroud)

.cpp文件

A::A()
{

}

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

 ...
              //manipulations on Graph
 ...

 m_tempStructResult.G = Graph;
}
Run Code Online (Sandbox Code Playgroud)

我得到的编译错误是:

error C2512: 'A::Result' : no appropriate default constructor available
Run Code Online (Sandbox Code Playgroud)

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

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

        int x;
        UGraph G;
    };
Run Code Online (Sandbox Code Playgroud)

问题解决了.

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

谢谢.

dav*_*igh 6

是的,在构造函数中使用初始化列表Result:

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

}
Run Code Online (Sandbox Code Playgroud)

C++ 11中的另一种方法是在类中给它一个默认值:

struct Result
{
    UGraph G = UGraph(10);
};
Run Code Online (Sandbox Code Playgroud)

有关小型演示,请参见此处.


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

所以这是另一个示例代码,它使用聚合初始化来初始化成员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{};
}
Run Code Online (Sandbox Code Playgroud)

另一个演示在这里.

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