And*_*san 3 c++ forward-declaration visual-c++
我正在用C++编写一个小游戏作为练习,我遇到了一个难题.其基本思路是,Level有一个vector的Entity,每个Entity实例都知道它属于哪个级别.到目前为止非常简单.
我在我的Entity类中得到了一些讨厌的编译错误,因为它无法弄清楚是什么Level.一个简单的前向类声明就在声明之前Entity轻松修复了.但是,我已经"Level.h"加入了"Entity.h".和Level和Entity均声明并在相同的命名空间中定义.
注意:Entity.h还包括Level.h.
#include "Level.h"
namespace GameNS {
// Required, otherwise the compiler complains
class Level;
class Entity
{
public:
...
Run Code Online (Sandbox Code Playgroud)
当编译器Level到达时,编译器是否应该知道它是Entity什么?
不,那不是C++编译器的工作原理.它的作用是它基本上一次传递一个翻译单元的文件.宽松地说,TU是一个包含所有包含的实现文件.
如果你有Level.h和Entity.h(你可能会)包含警卫并且它们彼此包含,其中一个(取决于顺序)将被编译器遗漏,并且其中一个名称将不会被声明.
根据经验,尽可能使用前向声明,并include在必要时使用前向声明.
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |