我正在尝试创建一个带有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?而不是在其成员结构中?
谢谢.
是的,在构造函数中使用初始化列表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一个合适的默认构造函数.否则,它可能会变得无法使用.