C ++主头文件,标题错误较小

时间:2013-09-05 21:53:33

标签: c++

我正在重写一个项目来重组和改进,出于某种原因我得到了一个奇怪的错误。

我有标题:

//Main.h
#include "Errors.h"
class MainClass
{
    public:
        ErrorClass errors;
};


//Errors.h
class ErrorClass
{
    public:
        MainClass* mainClassPtr;
};


//Main.cpp
#include "Main.h"

//nothing except the constructor


//Errors.cpp
#include "Main.h"

//constructor only

我在原始项目中完成了相同的设置并且它编译得很好,但在这个新的(没有功能)中我得到了错误:

error C2143: syntax error : missing ';' before '*'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

5次(总共10次错误)。 它们都指向 Errors.h 中的第21行,其中包含:

private:
    MainClass* mainClassPtr; //line 21

我尝试清理并重建,但错误仍在继续。

为什么这在项目中起作用而在另一个项目中起作用,我做错了什么以及如何才能使其正常工作?

2 个答案:

答案 0 :(得分:2)

您需要在MainClass中转发声明Errors.h,并在类定义中添加一个尾随;

//Errors.h

class MainClass; // forward declaration

class ErrorClass
{
    public:
        MainClass* mainClassPtr;

}; // trailing ;

您还应该在标题中添加包含警示。

答案 1 :(得分:2)

在你的Errors.h中,你应该做出我们所谓的前向声明

//Errors.h
   class MainClass;
// ^^^^^^^^^^^^^^^^ The forward declaration

   class ErrorClass
   {
    public:
        MainClass* mainClassPtr;
   //   ^^^^^^^^^    It is needed for here
   };
//  ^ Don't forget the semicolon here !

因为你有一个指向MainClass的成员,你应该做一个前向声明,向编译器表明这种类型是存在的。