c ++编译错误C4430,C2653,C2146,C2143

时间:2015-09-09 15:42:13

标签: c++ compiler-errors

我正在研究一些用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上添加的第一行时显示的消息是:

  

错误:需要类限定名称

1 个答案:

答案 0 :(得分:3)

以下是您发布的代码的缩写版本,我的观察结果为:

class PublisherModule [... bunch of base classes...]
{

public:
    Types::ModeRecord;
};

你认为这条线怎么办?
Types::ModeRecord;

它不是[TypeName] [VariableName];形式(例如int i;
它看起来不像方法原型(例如void foo(int i);
它不是typedef 它看起来不像普通的C ++。

认为 它在做什么?