【问题标题】:c++ compile error C4430, C2653, C2146, C2143c++编译错误C4430、C2653、C2146、C2143
【发布时间】:2015-09-09 23:54:27
【问题描述】:

我正在开发一些用 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 的原因是我可以将以下代码添加到PublisherModule.cpp 文件的publish() 函数中:

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:“类型”:不是类或命名空间名称

错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int

错误 C2146:语法错误:缺少 ';'在标识符“ModeData”之前

错误 C2143:语法错误:缺少 ';'在'*'之前

我总共收到了 4 次error C4430,其他错误各一次。他们都在抱怨我添加到.h 文件中的行。谷歌发现了第一个错误,并在 SO:Compiler error C2653: not a class or namespace name 上遇到了这个答案,看来原因是头文件中的循环依赖...

但据我所知,这里并没有发生这种情况...是否还有其他原因导致我可能会收到此编译错误,以及是什么阻止了我的代码构建?

当我将光标悬停在我添加到.h 文件Types::ModeRecord 中的第一行上时显示的消息是:

错误:需要一个类限定名称

【问题讨论】:

  • 在源代码的哪一行收到错误消息error C2653: 'SIFFTypes': is not a class or namespace name
  • 抱歉,我的问题中有错字 - 现在已修复。这是.h 文件中Types::ModeRecord; 上方的行。该特定行实际上只是一个注释 - 上面没有可执行代码。

标签: c++ compiler-errors


【解决方案1】:

根据我的观察,这是您发布的代码的缩写版本:

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

public:
    Types::ModeRecord;
};

你觉得这条线有什么作用??
Types::ModeRecord;

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

认为它在做什么?

【讨论】:

  • 抱歉 - 这是一个错字,一定是在复制和粘贴代码时遗漏了它。现已修改。
  • 看起来他几乎是在尝试using 声明,这将在下面直接解释ModeRecord 的两种用途...
猜你喜欢
  • 1970-01-01
  • 2015-04-24
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 2011-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多