我正在尝试创建一个内部带有struct成员的类:
.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);
};
有关小型演示,请参见此处。
编辑感谢@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{};
}
这里的另一个演示。
但是,这并不意味着我建议这样做。而是我会给Result
一个适当的默认构造函数。否则,它可能变得无法使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句