在同一个头文件中使用结构内部的类

时间:2017-01-09 00:05:52

标签: c++ c++11

我想在这样的结构中使用一个类:

struct A {
    int a;
    string b;
    SomeClass some_class;
};

class SomeClass {
private:
    A a;
// some code
};

我试图转发声明结构但它不起作用,我经常得到不完整的类型错误。

1 个答案:

答案 0 :(得分:1)

当您将struct或class类型的成员定义为组件(而不是作为引用或指向它的指针)时,必须在此时定义此组件的内存布局。因此,在SomeClass some_class内声明struct A时,必须完全定义SomeClass,包括成员等等;如果您将A a声明为SomeClass的组成部分,则A的结构需要完全定义。因此,无法将两者都定义为彼此的组成部分。

但它不仅仅是一个鸡与蛋的问题,因为 - 即使你能以某种方式声明它 - 实例化SomeClass的实例意味着什么?它将有一个组件a,然后它将具有(不同的)组件some_class,然后它将具有(不同的)组件a,依此类推。

如果我理解你,你想建立some_classa的夫妻。为此,使用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
};