类类型作为参数,类转发
Class type as parameter, and class forward
我创建了一个简单的游戏引擎,切换场景几乎没有问题。
我有2节课:游戏和场景
在游戏类中,我有 2 个指向场景的指针,以及 switchScene() 方法,我想将其共享到 Scene 对象。
在场景类中,我想有一个指向游戏对象的指针,但这不起作用。
游戏.hpp
#pragma once
#include "Scene.cpp"
class Game{
public:
Game();
~Game();
void init(const char* title, int width, int height, bool fullscreen, int fps);
void switchScene(Scene* scene);
private:
Scene* stage = nullptr;
Scene* tmpStage = nullptr;
};
场景.hpp
#pragma once
#include <vector>
#include <string>
#include "Game.hpp"
class Game;
class Scene{
public:
Scene(std::string sceneName);
~Scene();
void setGame(Game* g);
protected:
Game* game;
};
这样,我丢失了游戏类定义,并在尝试切换场景时出现此错误:
error: invalid use of incomplete type ‘class Game’
game->switchScene(new Scene("A"));
我能用这个做什么?如何将对游戏对象的引用放入场景?
如果在Game.hpp
头文件中转发声明Scene
,则可以删除#include "Scene.hpp"
(实际上应该是)和另一个头文件中的#include "Game.hpp"
剩下的可能问题是两个源文件都需要包含两个头文件。
相关文章:
- 将函数参数完美转发到函数指针:按值传递呢?
- 转发变量参数列表以模拟 std::thread
- 在按值调用 (c++) 中转发构造函数参数
- 存储稍后要转发的变量参数
- C++使用默认模板参数键入别名和转发声明
- 是否可以在不扣除的情况下将模板参数转发到 make_*?
- 可变参数模板参数转发使用逗号运算符
- 在可变参数函数中转发特定范围的参数
- 可变参数模板:将整数参数完美转发到 lambda
- 我可以std::在fold表达式中转发参数吗
- 如何构造一个 std::variant 类型对象,其自身 Templated 和构造函数转发参数
- C++或宏魔术来生成方法和转发参数
- C 从函数指针推导的转发参数时无隐式转换
- 如何施放转发参数包
- 转发参数时应该使用()或{}吗
- 在标签调度中转发参数
- 函数转发参数而不执行任何操作
- 正在转发参数
- 何时使用std::forward来转发参数
- C++:转发参数包和std::tuple/数组的和