我有一些在同一个文件中顺序声明的类,但是,我希望它们相互引用。但是,类只能由它们之上的类声明。
我可以通过将它们分成不同的 .h 文件并#include
根据需要将它们相互保存来做到这一点吗?或者可以在将它们保存在同一个文件中的同时做到这一点>
或者这是不好的做法?
(具体来说,我有一个类 A 的实例,它需要跟踪不同类类型的 B 类的多个实例,这些实例可能会尝试以无特定顺序与类 A 交互;我需要保持特定于试图与 A 类的 ONE 实例对话的 B 类...)
只要“引用”你的意思是指针,这应该有效:
class Foo;
class Bar {
Foo* p;
};
class Foo {
Bar* p;
};
您可以转发声明类,它们稍后会在文件中定义它们:
class A;
class B
{
// As pointed out by syam this will have to be an A* or A& not just of type A.
// If this line were:
// A myA
// The compiler gives error: field ‘myA’ has incomplete type
A* myA;
};
class A {};
如果在任何时候你想A
从一个方法访问方法或属性,B
那么你必须确保这些方法是在定义之后定义的A
。
class A;
class B
{
A& myA;
int getAValue(void); // Can't use myA.value here as value is not declared yet.
};
class A
{
public:
int value;
};
int B::getAValue(void) {return myA.value;}
您可以使用前向声明。
你甚至可以引入一个自引用指针:
class Foo {
Foo* parent;
};