我有这样的情况
在文件GameServer.h中:
class ServerGameStruct; //I can't simply include ServerGameStruct.h
// because of cyclic dependency
class GameServer {
public:
class Client { };
private:
ServerGameStruct gameStructure_;
}和ServerGameStruct.h文件中
#include "GameServer.h"
class ServerGameStruct {
public:
typedef GameServer::Client Client;
// some method which use type Client *
// no class members with type Client
}在编译之后,我得到了错误,GameServer::gameStructure_使用了未定义的类GameServerStruct。
如何解决这种报头循环依赖?
发布于 2013-05-28 20:40:31
最简单的解决方案是将gameStructure_设为指针:
std::unique_ptr<ServerGameStruct> gameStructure_;原因是指向类的指针不需要声明类的完整定义。而当您声明一个类的直接实例时,就像在您的代码中一样,那么您需要类的完整定义。
您也可以将其设置为引用,但随后必须在GameServer构造函数中对其进行初始化。
发布于 2013-05-28 20:39:23
使用指针
ServerGameStruct* gameStructure_;在这种情况下,您需要手动处理ServerGameStruct的生命周期。智能指针可以帮助你做到这一点。
发布于 2013-05-28 20:39:50
您需要使gameStructure_成为(智能)指针或引用,这样就不需要它的类型定义了。
https://stackoverflow.com/questions/16792268
复制相似问题