变量在类定义中是不完整的类型?

时间:2015-09-01 14:44:43

标签: c++ qcc

我在.h文件中有这个类定义,并且在.cpp文件中有实现。当我尝试编译它时,头文件会出现一些错误和警告:

    /home/don/BerthaApex/apex/src/lib/apexmain/apexloader.h:6: error: variable 'APEX_EXPORT ApexLoader' has initializer but incomplete type
 class APEX_EXPORT ApexLoader
                   ^
    /home/don/BerthaApex/apex/src/lib/apexmain/apexloader.h:6: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]
    /home/don/BerthaApex/apex/src/lib/apexmain/apexloader.h:9: error: expected primary-expression before 'public'
 public:

发生此错误的代码是:

#ifndef _APEXLOADER_H
#define _APEXLOADER_H

#include "global.h"

class APEX_EXPORT ApexLoader
{

public:
    int Load( int argc, char *argv[]);

};

#endif

使用"类APEX_EXPORT ApexLoader"是错误和警告的一条线。

APEX_EXPORT在头文件中定义,该文件包含在同一文件中。

编辑: APEX_EXPORT在" global.h"中定义。如下:

#ifdef APEX_MAKEDLL
    #define APEX_EXPORT APEX_EXPORT_DECL
#else
    #define APEX_EXPORT APEX_IMPORT_DECL
#endif

有谁知道为什么会出现这些错误?我怎么能摆脱他们? 提前谢谢!

编译器:gcc 4.8.4 操作系统:Ubuntu 14.04

1 个答案:

答案 0 :(得分:8)

我的通灵调试技巧告诉我APEX_EXPORT不是#define d因此编译器认为您正在尝试声明该类型的变量。

如果您认为自己已包含所有正确的标题,那么最好的方法就是在源文件上运行预处理器并查看它生成的内容(例如g++ -E)。