2013-05-11 54 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

相关问题