我正在重写一个项目来重组和改进,出于某种原因我得到了一个奇怪的错误。
我有标题:
//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
我尝试清理并重建,但错误仍在继续。
为什么这在项目中起作用而在另一个项目中起作用,我做错了什么以及如何才能使其正常工作?
答案 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
的成员,你应该做一个前向声明,向编译器表明这种类型是存在的。