首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >标头与类型定义之间的循环依赖关系

标头与类型定义之间的循环依赖关系
EN

Stack Overflow用户
提问于 2013-05-28 20:36:46
回答 4查看 76关注 0票数 2

我有这样的情况

在文件GameServer.h中:

代码语言:javascript
复制
class ServerGameStruct; //I can't simply include ServerGameStruct.h
                        // because of cyclic dependency
class GameServer {
public:
    class Client { };
private:
    ServerGameStruct gameStructure_;
}

和ServerGameStruct.h文件中

代码语言:javascript
复制
#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。

如何解决这种报头循环依赖?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-28 20:40:31

最简单的解决方案是将gameStructure_设为指针:

代码语言:javascript
复制
std::unique_ptr<ServerGameStruct> gameStructure_;

原因是指向类的指针不需要声明类的完整定义。而当您声明一个类的直接实例时,就像在您的代码中一样,那么您需要类的完整定义。

您也可以将其设置为引用,但随后必须在GameServer构造函数中对其进行初始化。

票数 1
EN

Stack Overflow用户

发布于 2013-05-28 20:39:23

使用指针

代码语言:javascript
复制
ServerGameStruct* gameStructure_;

在这种情况下,您需要手动处理ServerGameStruct的生命周期。智能指针可以帮助你做到这一点。

票数 0
EN

Stack Overflow用户

发布于 2013-05-28 20:39:50

您需要使gameStructure_成为(智能)指针或引用,这样就不需要它的类型定义了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16792268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档