【问题标题】:One file doesn't recognize other file's class in C++一个文件无法识别 C++ 中其他文件的类
【发布时间】:2010-09-09 11:23:19
【问题描述】:

我在文件“Particles.h”中有自己的类,该类的实现在“Particles.cpp”中

我希望文件“Load.h”能够识别其中的类,所以我添加了这一行

#include "Particles.h"

文件无法识别它,过去一切正常(我没有对该类进行任何更改)。

我该怎么办?

【问题讨论】:

    标签: c++ class header


    【解决方案1】:

    听起来您的包含路径(编译器扫描目录列表以查找您#include 的文件)设置不正确。你用的是哪个编译器?

    【讨论】:

      【解决方案2】:

      确保文件“Particles.cpp”也包含“Particles.h”,并且这些文件在同一个文件夹中,并且它们都是同一个项目的一部分。如果您还分享您从编译器获得的错误消息,这将有所帮助。

      【讨论】:

        【解决方案3】:

        Dev C++,它使用 GCC, 该行是:

        Stone *stone[48];
        

        它说:“预期的构造函数、析构函数或在 '*' 标记之前的类型转换”。

        【讨论】:

          【解决方案4】:

          好吧,如果您列出了错误代码,它可能会有所帮助。在我的脑海中,你在 Particles.h 中有什么东西可以确保该文件只包含一次吗?有两种方法可以做到这一点。第一个是使用#pragma 一次,但我认为这可能是微软特有的。第二种是使用#define。 示例:

          #ifndef PARTICLES_H 
          #define PARTICLES_H
          
          class CParticleWrapper
          {
          ...
          };
          
          #endif
          

          此外,除非您从 Particles.h 中的类派生或使用类的实例而不是指针,否则您可以使用类的前向声明并跳过在头文件中包含头文件,这将节省您的编译时间。

          #ifndef LOAD_H
          #define LOAD_H
          
          class CParticleWrapper;
          
          class CLoader
          {
             CParticleWrapper * m_pParticle;
          
          public:
          
             CLoader(CParticleWrapper * pParticle);
             ...
          };  
          
          #endif
          

          然后,在 Load.cpp 中,您将包含particle.h 文件。

          【讨论】:

            【解决方案5】:

            听起来你需要包含 Stone 类的定义,但如果没有更多细节就不可能说出来。您可以通过删除不相关的代码并发布它来缩小错误范围吗?

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-01-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-10-18
              • 1970-01-01
              相关资源
              最近更新 更多