gpt4 book ai didi

c++ - 错误 C2143。为什么 VC++ 找不到我的类?

转载 作者:行者123 更新时间:2023-11-28 01:08:45 24 4
gpt4 key购买 nike

我在一个包含多个类的项目中工作。所有头文件都放在“include”文件夹中,所有 src 文件都在另一个文件夹中。但是在这一点上,缺少一个一直工作没有问题的类。

产生错误的代码是:

namespace render{   
class CSprite2D
{
CTexture * m_texture;

错误是syntax error : missing ';'在“*”之前所以我不知道为什么 VC++ 找不到我的类(class)。 VC++ 编译类的顺序非常奇怪:在尝试编译 Texture.cpp 之前检测到 sprite2D 中的错误。另外,CTexture类在创建sprite2D之前已经进入项目,并完美运行。

你能帮我一些查找错误的技巧吗?

*编辑:*它有效,解决方案是简单地转发声明纹理类(感谢 James 和 peenut)。但现在我的疑问是:如果我已经包含了纹理,为什么我需要转发声明纹理类?包含头文件还不够?

提前致谢。

最佳答案

只需声明它,您只使用指针:

namespace render{
class CTexture; //forward declaration
class CSprite2D
{
CTexture * m_texture;

当然,正如评论所暗示的那样:

  • 不要忘记在您的 *.cpp 文件中包含所有必要的 header
  • 使用前向声明来打破循环依赖(例如 class A { B * b; }; class B { A * a; })

编辑:提问者的编辑:

I've included the texture, why do I need to forward declare texture class?

假设您有“sprite.hpp”、“texture.hpp”,并且 CSprite2D 包含指向纹理的指针。如果没有前向声明,您必须始终在包含“sprite.hpp”之前包含“texture.hpp”。更糟糕的是,如果您的 CTexture 使用指向 CSprite2D 的指针,您别无选择,只能使用前向声明来避免循环依赖。

关于c++ - 错误 C2143。为什么 VC++ 找不到我的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4686383/

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