我遇到了循环依赖问题。我有两个头文件,它们各自相互依赖。我遇到的问题与命名空间中的类有关。
档案#1
class Player; // This is how I forward declare another class
namespace sef {
class Base
{
public:
Player a;
bool SendEvent(int eventType);
};
class Sub: public Base
{
protected:
Player b;
bool Execute(string a);
};
}
文件#2
//class sef::Sub; // I am having trouble compiling this
class Player
{
public:
sef::Sub* engine; // I am having trouble compiling this
};
如何在文件#2中转发声明sef :: Sub类?
答案 0 :(得分:1)
首先,如果您只声明一个类型,则只能使用指针或引用。
class Player; // declaration, not definition
class Base {
Player* p;
};
其次,名称空间是可扩展的,因此您可以编写如下:
namespace Foo { class Player; }
并使用指针:
class Base {
Foo::Player* p;
}