Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;如何防止导入循环_C++_Class_Include_Header Files - Fatal编程技术网

C++ C++;如何防止导入循环

C++ C++;如何防止导入循环,c++,class,include,header-files,C++,Class,Include,Header Files,目前我还不太清楚,所以我正在尝试堆栈溢出。我的问题是,我有一个名为“场景”的类,它将有一个“游戏对象”的地图。问题是这些游戏对象需要使用场景中的一些功能,所以我创建了一个场景*分配给主场景。这个例子的问题是,我在一个循环中导入了一个场景,其中包括游戏对象,其中包括场景(并且继续)。如果你认为5Is不清楚,请随意评论,我会提供更多细节或编辑这篇文章 场景h class Scene { public: sf::RenderWindow* window; _Manager manage

目前我还不太清楚,所以我正在尝试堆栈溢出。我的问题是,我有一个名为“场景”的类,它将有一个“游戏对象”的地图。问题是这些游戏对象需要使用场景中的一些功能,所以我创建了一个场景*分配给主场景。这个例子的问题是,我在一个循环中导入了一个场景,其中包括游戏对象,其中包括场景(并且继续)。如果你认为5Is不清楚,请随意评论,我会提供更多细节或编辑这篇文章

场景h

class Scene
{
public:
    sf::RenderWindow* window;
    _Manager manager;

    sf::Color backgroundColor;
    std::string name;

    std::map<std::string, GameObject*> gameObjects;

    Scene();
    Scene(std::string name);

    virtual void Start() = 0;
    virtual void Update() = 0;
    virtual void Draw() = 0;

    void _Update();
};
课堂场景
{
公众:
sf::RenderWindow*窗口;
_经理;
颜色背景色;
std::字符串名;
地图游戏对象;
场景();
场景(std::字符串名称);
虚拟void Start()=0;
虚拟void Update()=0;
虚空绘制()=0;
void_Update();
};
GameObject.h

class GameObject : public Object
{
private:
    Scene* scene;
    std::vector<Component*> components;
public:
    Transform* transform = new Transform;

    void AddComponent(Component* component);
    Component* GetComponent(std::string type);

    GameObject* Find();
    void Instantiate(GameObject* gm, Transform* transform);

    void Start();
    void Update();
};
类游戏对象:公共对象
{
私人:
场景*场景;
std::向量分量;
公众:
变换*变换=新变换;
无效添加组件(组件*组件);
组件*GetComponent(标准::字符串类型);
GameObject*Find();
无效实例化(GameObject*gm,Transform*Transform);
void Start();
无效更新();
};

对于那些遇到同样问题的人,我忘记了你可以做正向声明,当你需要使用完整类时,只需在类的.cpp文件中导入你需要的文件。

对于那些遇到同样问题的人,我忘记了你可以做正向声明,当你需要使用完整类时,只需导入你需要的文件在类的.cpp文件中。

有趣的是,可能会将公共依赖项拆分为自己的组件,或者使用接口?听起来像是在讨论头文件以及它们之间的递归依赖项。您需要做的是打开C++教科书,讲解解释前向声明是什么以及如何使用它们,然后阅读该章。所有这些都将被解释。您的问题是由于缺少包含保护还是更直接地解决了问题?“我需要声明该类”和“我需要声明一个稍后定义的空”都不是有用的问题描述。“宣告无效”,这是什么意思?代码胜于雄辩。我们只能猜测你想做什么。请遵循创建@requiren5的规则,这不是我问题的答案。你的问题还不清楚。嗨,有趣的是,也许将公共依赖项拆分为它自己的组件,也许使用一个接口?听起来你在谈论头文件,以及它们之间的递归依赖项。您需要做的是打开C++教科书,讲解解释前向声明是什么以及如何使用它们,然后阅读该章。所有这些都将被解释。您的问题是由于缺少包含保护还是更直接地解决了问题?“我需要声明该类”和“我需要声明一个稍后定义的空”都不是有用的问题描述。“宣告无效”,这是什么意思?代码胜于雄辩。我们只能猜测你想做什么。请遵循创建@requiren5的规则,这不是我问题的答案。你的问题还不清楚。