Проблема циклической зависимости с классом внутри пространства имен

У меня проблема с циклической зависимостью. У меня есть два заголовочных файла, и каждый из них зависит друг от друга. Проблема, с которой я столкнулся, связана с классом в пространстве имен.

Файл № 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
};

Как переслать объявление класса sef::Sub в файле № 2?

1 ответ

Решение

Во-первых, если вы объявляете только тип, вы можете использовать только указатель или ссылку.

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

Во-вторых, пространства имен расширяемы, поэтому вы можете написать так:

namespace Foo { class Player; }

И использовать указатель:

class Base {
  Foo::Player* p;
}
Другие вопросы по тегам