0

我正在重写一个项目以进行重组和改进,由于某种原因,我遇到了一个奇怪的错误。

我有标题:

//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

我试图清理和重建,但错误仍在继续。

为什么这在一个项目中而不是在另一个项目中起作用,我做错了什么,我怎样才能使它起作用?

4

2 回答 2

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您应该进行前向声明以向编译器指示该类型存在。

于 2013-09-05T21:56:28.263 回答
2

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

//Errors.h

class MainClass; // forward declaration

class ErrorClass
{
    public:
        MainClass* mainClassPtr;

}; // trailing ;

您还应该在标题中添加包含防护。

于 2013-09-05T21:54:57.567 回答