2013-05-11 82 views
2

好吧,我有一個類移植到Linux的錯誤:之前預期初始化「:」令牌

class DLL_LIB a: public b 
{ 

} 

gcc的說,

expected initializer before ‘:’ token

我不明白爲什麼。也許是與鏈接DLL庫的proplem,但我這樣做:

#ifdef _WIN32 
#define DLL_LIB __declspec(dllexport) 
#else 
#define DLL_LIB __declspec(dllimport) 
#endif 

雖然我已經做了假的DLL LIB我不能避免「預期初始化」的錯誤

謝謝你很多!

+1

您正在使用特定於MS的關鍵字 – 2013-05-11 10:59:18

回答

4

您對DLL_LIB的定義是錯誤的。它應該是這樣的:

#ifdef _WIN32 
    #ifdef BUILDING_DLL_LIB 
    #define DLL_LIB __declspec(dllexport) 
    #else 
    #define DLL_LIB __declspec(dllimport) 
    #endif 
#else 
    #define DLL_LIB 
#endif 

本練習的目的如下:

在Windows上,你需要「符號從這個DLL導出」之間的區別(這是由__declspec(dllexport)表示,並且在構建DLL時必須存在)以及「從DLL導入符號」(由__declspec(dllimport)表示並且在將鏈接頭包含在鏈接DLL的程序中時必須存在)。

在Linux上,沒有這樣的事情,所以宏必須由預處理器從頭中刪除 - 因此將其定義爲空。

+0

謝謝@Angew! – Demid 2013-05-11 11:33:37

相關問題