2015-09-01 61 views
-1

我有一个.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

+0

这个课程*之前的行*看起来像什么?什么是“APEX_EXPORT”?没有其他符号'ApexLoader'(例如作为预处理器宏)? –

+0

APEX_EXPORT在哪里定义?如果它在另一个文件中,您是否将头文件包含在头文件中? –

+0

您尚未定义宏'APEX_EXPORT',因此它看起来像名为“ApexLoader”的类APEX_EXPORT类型变量的声明。完全相同的错误[在这里](http://ideone.com/A9Pc6M)。 – molbdnilo

回答

8

我的心理调试技巧告诉我,APEX_EXPORT#define d,因此编译器认为你想声明该类型的变量。

如果你认为你已经包括了所有正确的头去最好的办法是仅根据您的源文件运行预处理程序,看看它是什么产生(例如g++ -E)。

+0

你是对的,它没有被定义,因为有以下错误:它在我的项目文件global.h中定义,但我还包含另一个文件夹,其中还包含一个不同的global.h文件。设置正确的包含文件夹,并突然它工作:) – DrDonut

相关问题