我已经对所有内容进行了评论,代码现在看起来像这样。
//AOBSClass.h
#ifndef __AOBSCLASSHDR__
#define __AOBSCLASSHDR__
#include "IDriver.h"
#include "ActuationClass.h"
namespace AOBS
{
class AOBSClass
{
public:
AOBSClass(IDriver *driver);
~AOBSClass();
IDriver *drivers;
ActuationClass act;
private:
};
}
#endif
// ActuationClass.h
#ifndef __ACTUATIONCLASSHDR__
#define __ACTUATIONCLASSHDR__
#include "AOBSClass.h"
namespace AOBS
{
class ActuationClass
{
public:
ActuationClass();
~ActuationClass();
AOBSClass *aobs; // This line here
private:
};
}
#endif
我一直在上面显示的行中得到以下错误。我不知道是什么导致它。
error C2143: syntax error : missing ';' before '*'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
我正在使用Visual Studio Express 2013。
答案 0 :(得分:5)
这两个文件互相包含!只需加上
class AOBSClass;
在ActuationClass.h的开头。
答案 1 :(得分:3)
你有一个循环依赖。 ActuationClass.h
包括AOBClass.h
,反之亦然。
要解决此问题,请移除#include "AOBClass.h"
中的ActuationClass.h
,然后转发声明AOBSClass
。
namespace AOBS
{
class AOBSClass; // Forward declare
class ActuationClass
{
public:
ActuationClass();
~ActuationClass();
AOBSClass *aobs;
private:
};
}
答案 2 :(得分:3)
您有循环包含。两个头文件都包含在内。一般来说,包括应该采用一种方式,如树形结构。
A包括B包括C等
另外,正如其他人所指出的那样:前瞻声明可以帮助解决这类问题