命名空间内的类的循环依赖问题

时间:2014-02-20 23:24:12

标签: c++ header cyclic-reference cyclic-dependency

我遇到了循环依赖问题。我有两个头文件,它们各自相互依赖。我遇到的问题与命名空间中的类有关。

档案#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类?

1 个答案:

答案 0 :(得分:1)

首先,如果您只声明一个类型,则只能使用指针或引用。

class Player; // declaration, not definition
class Base {
  Player* p;
};

其次,名称空间是可扩展的,因此您可以编写如下:

namespace Foo { class Player; }

并使用指针:

class Base {
  Foo::Player* p;
}