C++ 在一个代码文件中使用头文件,反之亦然?

C++ 在一个代码文件中使用头文件,反之亦然?,c++,C++,所以我有一点问题(好吧,两个,但它们彼此无关) 我有两个标题,如下所示: 游戏 #ifndef INIT_GAME_H #define INIT_GAME_H #include <deps/deps.h> #include <handlers/RenderHandler.h> class Game { private: RenderHandler* renderHandler; /* <-- This is line 32 in my

所以我有一点问题(好吧,两个,但它们彼此无关)

我有两个标题,如下所示:

游戏

#ifndef INIT_GAME_H
#define INIT_GAME_H

#include <deps/deps.h>

#include <handlers/RenderHandler.h>

class Game {
    private:
        RenderHandler* renderHandler; /* <-- This is line 32 in my actual header */

    public:
        Game() {};
        ~Game() {};

        int initialise();
        void handleEvents();
        void update();
        void render();
        void clean();
}; // class Game
#endif // INIT_GAME_H
正如您可能已经猜到的,我正在尝试将
游戏
的实例存储在
RenderHandler
中,反之亦然。我可能完全用错了方法,但我不明白为什么它不起作用

此外,所有
位于头文件第32行之前的正确位置

编辑:

执行建议的转发声明后,我得到以下错误(现在在RenderHandler.cpp文件中)

这就是我的代码文件的样子

RenderHandler.cpp

#include <handlers/RenderHandler.cpp>

void RenderHandler::initialise(Game* game) {
    this->game = game;
}

void RenderHandler::render() {
    glfwSwapBuffers(game->getPrimaryWindow());
}
#包括
void RenderHandler::初始化(游戏*游戏){
这->游戏=游戏;
}
void RenderHandler::render(){
glfwSwapBuffers(游戏->getPrimaryWindow());
}

使用转发声明:

#ifndef HANDLERS_RENDERHANDLER_H
#define HANDLERS_RENDERHANDLER_H

// FW declaration of Game
class Game;

class RenderHandler {
    private:
        Game* game;

    public:
        RenderHandler() {};
        ~RenderHandler() {};

        void initialise(Game* game);
        void render();
}; // class RenderHandler
#endif // HANDLERS_RENDERHANDLER_H

使用远期申报:

#ifndef HANDLERS_RENDERHANDLER_H
#define HANDLERS_RENDERHANDLER_H

// FW declaration of Game
class Game;

class RenderHandler {
    private:
        Game* game;

    public:
        RenderHandler() {};
        ~RenderHandler() {};

        void initialise(Game* game);
        void render();
}; // class RenderHandler
#endif // HANDLERS_RENDERHANDLER_H

文件中可能存在重复的使用转发声明文件中可能存在重复的使用转发声明,或者,当然,在
Game.h
中反向和正向声明
RenderHandler
类:)@约阿希姆:是的,我倾向于认为你的建议会更有意义,但在这样做的时候,我仍然可以访问声明类中的函数吗?正确的方法是(以我最初的提议为例):你FW在
RenderHandler
的.h中声明
类游戏
,因此,您无法在将在
RenderHandler.h
中编写的代码中访问
Game
的任何功能。但是,在
RenderHandler.cpp
文件中,您将包含
Game.h
,这样您就可以从那里访问
Game
功能。如果您不使用模板,通常最好避免在头文件中编写任何代码。当然,相反的方法是在
Game.h
中向前声明
RenderHandler
类@约阿希姆:是的,我倾向于认为你的建议会更有意义,但在这样做的时候,我仍然可以访问声明类中的函数吗?正确的方法是(以我最初的提议为例):你FW在
RenderHandler
的.h中声明
类游戏
,因此,您无法在将在
RenderHandler.h
中编写的代码中访问
Game
的任何功能。但是,在
RenderHandler.cpp
文件中,您将包含
Game.h
,这样您就可以从那里访问
Game
功能。如果不使用模板,通常最好避免在头文件中编写任何代码。
#include <handlers/RenderHandler.cpp>

void RenderHandler::initialise(Game* game) {
    this->game = game;
}

void RenderHandler::render() {
    glfwSwapBuffers(game->getPrimaryWindow());
}
#ifndef HANDLERS_RENDERHANDLER_H
#define HANDLERS_RENDERHANDLER_H

// FW declaration of Game
class Game;

class RenderHandler {
    private:
        Game* game;

    public:
        RenderHandler() {};
        ~RenderHandler() {};

        void initialise(Game* game);
        void render();
}; // class RenderHandler
#endif // HANDLERS_RENDERHANDLER_H