我有一些头文件,其中包含一些简单的美化struct
s,其中仅定义了纯虚拟方法。代码在带有 Visual Studio 2015 的 Windows 上编译良好,但 GCC 卡住了。首先,代码:
代码清单
namespace CustomUtils
{
interface API_ABSTRACT overriden
{
virtual int GetStatus() const = 0;
};
}
在导入的头文件中,interface
仅定义为stuct
:
#define interface struct
而且API_ABSTRACT
只是一个没有任何意义的宏:
#define API_ABSTRACT
这interface
typedef
是我无法控制的继承代码的一部分,并且API_ABSTRACT
已经到位,因此我可以在 Windows 和 Linux 中定义自定义属性以限制我导出的 API 函数。虽然这是在 VS2015 中构建的,但在 Linux 上,我收到了构建错误:
error: variable 'API_ABSTRACT CustomUtils::overridden' has initializer but incomplete type
如果我换行:
interface API_ABSTRACT overriden
我认为它正在被翻译成:
struct overriden
该代码将在 Linux 中正常编译。我尝试过编译以gcc -E -dD
将“预处理”后的源渲染到屏幕上以查看typedef
和#define
替换,但它似乎只显示.cpp
文件的输出,而不是头文件(.h
)。
问题
为什么在尝试使用 GCC 编译时这段代码不起作用?
谢谢你。
编辑#1
的输出gcc -E
显示有问题的行是:
struct API_ABSTRACT overriden
因此,罪魁祸首似乎是API_ABSTRACT
宏,它的评估结果为零。