我有两个需要彼此指向的对象...唯一的问题是,因为它们是按特定顺序声明的,所以其中一个或另一个不知道存在的另一个对象。例如:
...
#define foobar_h
class Foo {
Bar* b;
};
class Bar {
Foo* f;
};
...
我如何声明这些类,以便他们能够快乐地引用彼此?
答案 0 :(得分:10)
您做了预申报:
class Bar;
class Foo {
Bar* b;
};
class Bar {
Foo* f;
};
这使编译器知道类型Bar
是一个类,因此它可以正确地找出如何表示它的指针。
当然,这仅适用于不需要Bar
类型值的确切布局和大小的情况,如果您尝试使用以下内容嵌入值:
class Foo {
Bar my_bar;
};
你未能成功,但既然你使用指针就可以了。引用也起作用,因为引用没有嵌入整个对象。