我想在这样的结构中使用一个类:
struct A {
int a;
string b;
SomeClass some_class;
};
class SomeClass {
private:
A a;
// some code
};
我试图转发声明结构但它不起作用,我经常得到不完整的类型错误。
答案 0 :(得分:1)
当您将struct或class类型的成员定义为组件(而不是作为引用或指向它的指针)时,必须在此时定义此组件的内存布局。因此,在SomeClass some_class
内声明struct A
时,必须完全定义SomeClass
,包括成员等等;如果您将A a
声明为SomeClass
的组成部分,则A
的结构需要完全定义。因此,无法将两者都定义为彼此的组成部分。
但它不仅仅是一个鸡与蛋的问题,因为 - 即使你能以某种方式声明它 - 实例化SomeClass的实例意味着什么?它将有一个组件a
,然后它将具有(不同的)组件some_class
,然后它将具有(不同的)组件a
,依此类推。
如果我理解你,你想建立some_class
和a
的夫妻。为此,使用class
- 前缀声明 - 关键字和指针(而不是嵌套对象)。代码中的某处,例如在SomeClass
的构造函数中,指定一个值:
struct A {
int a;
string b;
class SomeClass *some_class;
};
class SomeClass {
public:
SomeClass() { a.some_class = this; };
private:
A a;
// some code
};