我正在一个有几个班级的项目中工作。所有头文件都进入“include”文件夹,所有src文件都进入另一个文件夹。但是在这一点上,缺少一个没有问题的课程。
产生错误的代码是:
namespace render{
class CSprite2D
{
CTexture * m_texture;
错误是语法错误:缺少';'在'*'之前 所以我不知道VC ++为什么找不到我的课程。 VC ++编译类的顺序非常疏远:在尝试编译Texture.cpp之前检测sprite2D中的错误。此外,CTexture类已进入项目,并在创建sprite2D之前完美运行。
你可以帮助我找一些找错的技巧吗?
* 编辑: *它有效,解决方案是简单地转发声明纹理类(感谢James和peenut)。但现在我怀疑的是:如果我已经包含纹理,为什么我需要转发声明纹理类?包含头文件是不够的?
提前致谢。
答案 0 :(得分:2)
只是声明它,你只使用指针:
namespace render{
class CTexture; //forward declaration
class CSprite2D
{
CTexture * m_texture;
当然,正如评论所说:
修改:Asker的编辑:
我已经包含了纹理,为什么我需要转发声明纹理类?
想象一下你有“sprite.hpp”,“texture.hpp”,而CSprite2D包含指向纹理的指针。如果没有前向声明,则必须在包含“sprite.hpp”之前包含“texture.hpp”。更糟糕的是,如果你的CTexture使用指向CSprite2D的指针,你别无选择,只能使用前向声明来避免循环依赖。
答案 1 :(得分:1)
如果代码所在的头文件中没有包含最终包含CTexture定义的任何内容,那么即使其他地方也不知道CTexture是什么。
但是,由于你只是在这里使用指针,你可能只是做一个前向声明并在.cpp文件中包含标题,其中CTexture的方法/数据用于避免循环标题包含。