编译一些代码需要前向类定义
visual C++: Forward class definition required to compile some code
我正在用c++编写一个小游戏作为练习,我遇到了一个难题。基本思想是,一个Level
有一个vector
为Entity
,每个Entity
实例都知道它属于哪一级。
我在我的实体类中得到一些讨厌的编译错误,因为它无法弄清楚Level
是什么。在Entity
声明之前一个简单的前向类声明很容易解决这个问题。但是,我已经在"Entity.h"
中包括了"Level.h"
。Level
和Entity
都在同一个名称空间中声明和定义。
注:Entity.h
也包括Level.h
。
#include "Level.h"
namespace GameNS {
// Required, otherwise the compiler complains
class Level;
class Entity
{
public:
...
在到达Entity
的时候,编译器不应该已经知道Level
是什么了吗?
不,这不是c++编译器的工作方式。它所做的就是一次传递一个翻译单元。粗略地说,TU是一个包含其所有内容的实现文件。
如果你在Level.h
和Entity.h
中有include守卫(你可能有),并且它们相互包含,根据顺序,它们中的一个将被编译器忽略,并且其中一个名称将不会被声明。
根据经验,可以的时候使用前向声明,必须的时候使用include
。
相关文章:
- 此代码是否违反一个定义规则
- 编写代码时C++出现错误:错误 1 错误 C2601:'circle':本地函数定义是非法的
- 我无法在 qt 的C++代码中定义字符串
- 这个c++代码是如何在没有定义函数的情况下运行的
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- Xcode 语义问题引用或以前定义的代码
- 我希望定义两个具有相同代码的不同名称的库
- C ++函数重新定义(代码不起作用 - 逻辑错误)
- 可视化C++显式模板定义 - 代码仍重复
- 将自定义代码添加到Swig包装器中
- HRESULT:将自定义代码与系统一个区分开
- 在继承的接口中调用自定义代码
- 我在哪里定义代码来释放在C Python模块init函数中分配的资源
- 如何使tolua++调用collect函数中的自定义代码
- 对 HTML5 项目使用自定义C++代码
- 如何在waf构建系统中使用自定义代码生成器
- 在Visual Studio中将自定义代码添加到Qt UIC生成的文件中
- ## 在C++定义代码中的含义是什么
- 在 MFC 应用终止时运行自定义代码:d'tor 还是WM_CLOSE?
- 用自定义代码包装对c++方法的调用