我之前提出的问题是错误的,所以我会将其固定发布
我有这个例子投掷
expected class-name before ‘{’ token
编译时出错。我理解为什么会失败,但我不知道如何解决它。谢谢。
的 BaseClass.h
#ifndef INHERITTEST_BASECLASS_H
#define INHERITTEST_BASECLASS_H
#include "ElementClass.h"
class ElementClass;
class BaseClass
{
private:
ElementClass *m_someField;
};
#endif
的 ElementClass.h
#ifndef INHERITTEST_ELEMENTCLASS_H
#define INHERITTEST_ELEMENTCLASS_H
#include "ChildClass.h"
class ChildClass;
class ElementClass
{
private:
ChildClass *m_class;
};
#endif
的 ChildClass.h
#ifndef INHERITTEST_CHILDCLASS_H
#define INHERITTEST_CHILDCLASS_H
#include "BaseClass.h"
class ChildClass : public BaseClass
{
};
#endif
答案 0 :(得分:2)
你有循环依赖的.h文件。
在BaseClass.h中:
#ifndef INHERITTEST_BASECLASS_H
#define INHERITTEST_BASECLASS_H
#include "ElementClass.h" // Includes ElementClass.h
在ElementClass.h中:
#ifndef INHERITTEST_ELEMENTCLASS_H
#define INHERITTEST_ELEMENTCLASS_H
#include "ChildClass.h" // Which included BaseClass.h
您可以删除那些#include
行,因为您只是通过指针使用这些类,并且前向声明足以达到此目的。
答案 1 :(得分:0)
当您使用继承时,请使用以下
#include "ChildClass.h"
class ChildClass;
是不必要的,如果你打算将这些文件分解为单独的源文件(看起来像你),你可以说
#include "ElementClass.h"
在派生类的源文件中