#define 语句中的预期标识符
expected identifier in #define statement
[请参阅下面我自己的回答。]
我的项目头文件中有这段代码:
#ifdef _LINUX
#ifdef BUILD_ext
#define EXP_IMP_GLOBAL extern
#else
#define EXP_IMP_GLOBAL
#endif
#else
G++ 在定义 BUILD_ext 时告诉我以下内容:
error: expected identifier before ‘extern’
#define EXP_IMP_GLOBAL extern
^
note: in expansion of macro ‘EXP_IMP_GLOBAL’
class EXP_IMP_GLOBAL Classname
^~~~~~~~~~~~~~
我真的不知道这个错误是怎么回事,因为当 BUILD_ext 未定义时错误不会出现,而且我也不明白,为什么没有标识符。
I don't really know what to make of this error since the error doesn't
appear when BUILD_ext is not defined and I also don't see, why there
would be no identifier.
当_LINUX
和BUILD_ext
都定义时,EXP_IMP_GLOBAL
扩展为extern
。所以你有:
class extern Classname
在你的代码中。
据此page:
The extern specifier is only allowed in the declarations of variables
and functions (except class members or function parameters).
因此您不能将 extern
说明符与 class declaration/definition 一起使用,编译器会报错。
我想您可以简单地删除 EXP_IMP_GLOBAL
来消除错误,因为 EXP_IMP_GLOBAL
在像现在这样使用时没有意义。
不确定您要做什么,但是 extern 是 C++ 关键字,您不能那样使用它。此外,任何字符序列都必须放在引号之间:
#define EXP_IMP_GLOBAL "extern"
这里的问题是,我完全误解了 extern
所做的事情。我想要的是控制我的图书馆的某些 类 是否从外面可见,并且基本上部分模仿 __declspec (dllexport)/__declspec (dllimport)
的行为
为了得到我需要的东西,我不得不换线
#define EXP_IMP_GLOBAL extern
到
#define EXP_IMP_GLOBAL extern __attribute__((visibility("default")))
并使用编译器标志 -fvisibility=hidden
[请参阅下面我自己的回答。]
我的项目头文件中有这段代码:
#ifdef _LINUX
#ifdef BUILD_ext
#define EXP_IMP_GLOBAL extern
#else
#define EXP_IMP_GLOBAL
#endif
#else
G++ 在定义 BUILD_ext 时告诉我以下内容:
error: expected identifier before ‘extern’
#define EXP_IMP_GLOBAL extern
^
note: in expansion of macro ‘EXP_IMP_GLOBAL’
class EXP_IMP_GLOBAL Classname
^~~~~~~~~~~~~~
我真的不知道这个错误是怎么回事,因为当 BUILD_ext 未定义时错误不会出现,而且我也不明白,为什么没有标识符。
I don't really know what to make of this error since the error doesn't appear when BUILD_ext is not defined and I also don't see, why there would be no identifier.
当_LINUX
和BUILD_ext
都定义时,EXP_IMP_GLOBAL
扩展为extern
。所以你有:
class extern Classname
在你的代码中。
据此page:
The extern specifier is only allowed in the declarations of variables and functions (except class members or function parameters).
因此您不能将 extern
说明符与 class declaration/definition 一起使用,编译器会报错。
我想您可以简单地删除 EXP_IMP_GLOBAL
来消除错误,因为 EXP_IMP_GLOBAL
在像现在这样使用时没有意义。
不确定您要做什么,但是 extern 是 C++ 关键字,您不能那样使用它。此外,任何字符序列都必须放在引号之间:
#define EXP_IMP_GLOBAL "extern"
这里的问题是,我完全误解了 extern
所做的事情。我想要的是控制我的图书馆的某些 类 是否从外面可见,并且基本上部分模仿 __declspec (dllexport)/__declspec (dllimport)
为了得到我需要的东西,我不得不换线
#define EXP_IMP_GLOBAL extern
到
#define EXP_IMP_GLOBAL extern __attribute__((visibility("default")))
并使用编译器标志 -fvisibility=hidden