我正在研究一些用C ++编写的模拟软件。目前,在尝试构建我的代码时,我得到了9个编译错误,所有人都在抱怨我刚刚添加的三行代码。这些行是PublisherModule.h
:
class PublisherModule :
public s::Module,
public s::Singleton<PublisherModule>,
public s::Interface,
public s::htmlPage{
public:
...
Types::ModeRecord;
ModeRecord modeData;
ModeRecord *modeDataPtr;
...
};
将这些声明添加到PublisherModule.h
的原因是我可以将以下代码添加到publish()
文件的PublisherModule.cpp
函数中:
Types::ModeRecord ModeData;
Types::ModeStatusRecord *ModeDataPtr = &ModeData;
DataStore->getModeData(*ModeDataPtr);
publish()
函数现在看起来像这样:
void PublisherModule::publishData(void){
...
Types::ModeRecord ModeData;
Types::ModeStatusRecord *ModeDataPtr = &ModeData;
DataStore->getModeData(*ModeDataPtr);
...
}
编译器给我的错误是:
错误C2653:'Types':不是类或命名空间名称
错误C4430:缺少类型说明符 - 假设为int。注意:C ++不支持default-int
错误C2146:语法错误:缺少';'在标识符'ModeData'之前
错误C2143:语法错误:缺少';'在'*'之前
我总共得到error C4430
4次,其他错误都是一次。他们都抱怨我添加到.h
文件中的行。让Google遇到第一个错误,并在SO Compiler error C2653: not a class or namespace name上遇到这个答案,看起来原因是头文件中的循环依赖...
但据我所知,这种情况并没有发生......有没有其他原因可以解决我的编译错误,以及阻止我的代码构建的原因是什么?
当我将光标悬停在.h
文件Types::ModeRecord
上添加的第一行时显示的消息是:
错误:需要类限定名称
答案 0 :(得分:3)
以下是您发布的代码的缩写版本,我的观察结果为:
class PublisherModule [... bunch of base classes...]
{
public:
Types::ModeRecord;
};
你认为这条线怎么办?
Types::ModeRecord;
它不是[TypeName] [VariableName];
形式(例如int i;
)
它看起来不像方法原型(例如void foo(int i);
)
它不是typedef
它看起来不像普通的C ++。
认为 它在做什么?