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

Using a class inside a structure in the same header file

本文关键字:结构 文件 一头      更新时间:2023-10-16

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

struct A {
int a;
string b;
SomeClass some_class;
};
class SomeClass {
private:
A a;
// some code
};

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

当您将struct或class类型的成员定义为组件(而不是作为引用或指向它的指针)时,必须在此时定义该组件的内存布局。因此,当在struct A中声明SomeClass some_class时,则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
};