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