У меня проблема с циклической зависимостью. У меня есть два заголовочных файла, и каждый из них зависит друг от друга. У меня проблема связана с классом в пространстве имен.
Файл № 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?
Во-первых, если вы объявляете только тип, вы можете использовать только указатель или ссылку.
class Player; // declaration, not definition
class Base {
Player* p;
};
Во-вторых, пространства имен расширяемы, поэтому вы можете написать так:
namespace Foo { class Player; }
И использовать указатель:
class Base {
Foo::Player* p;
}
Других решений пока нет …