2015-09-01 96 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

相關問題