gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 16:07:53 24 4
gpt4 key购买 nike

所以我遇到了一些问题(两个问题,但它们彼此无关)。

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

游戏.h

#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.h

#ifndef HANDLERS_RENDERHANDLER_H
#define HANDLERS_RENDERHANDLER_H

#include <init/Game.h>

class RenderHandler {
private:
Game* game;

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

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

但是上面的代码在编译期间给我一个错误:

game.h(32): error C2143: syntax error: missing ';' before '*'
game.h(32): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
game.h(32): error C2238: unexpected token(s) preceding ';'

您可能已经猜到了,我正在尝试将 Game 的实例存储在 RenderHandler 中,反之亦然。我可能以完全错误的方式进行操作,但我不明白为什么它不起作用。

此外,所有 ; 都在我的头文件中第 32 行之前的正确位置。

编辑:

完成建议的前向声明后,我收到以下错误(现在在 RenderHandler.cpp 文件中)。

Error: pointer to incomplete class type is not allowed

这是我的代码文件的样子

RenderHandler.cpp

#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

关于c++ - 在一个代码文件中使用头文件,反之亦然?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32398707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com