以下摘录以前是在Borland C ++,MSVC和OpenWatcom下编译的:
class aaa {
virtual _fastcall ~aaa();
};
class bbb:public aaa {
};
它不能在gcc / g ++(MinGW 4.8.0)下编译。错误:
probz.cpp:7:7: error: conflicting type attributes specified for 'virtual bbb::~bbb()' class bbb:public aaa { ^ probz.cpp:3:20: error: overriding 'virtual aaa::~aaa()' virtual _fastcall ~aaa()=0;///can't be abstract ^
显然,没有bbb :: ~bbb()!
实际的类层次结构更大,有很多类 bbb 继承自 aaa ,中间有成员,即bbb扩展abb,扩展了aab,这扩展了aaa。 aaa 确实有一个抽象的虚拟析构函数,它在中间类中实现,但不在叶子中实现。是的,我可以删除__fastcall
属性并进行编译。这是一个gcc限制,我无法调整调用约定吗?
答案 0 :(得分:1)
__fastcall
是一个调用约定。
这是一个非标准功能:名称开头的双下划线表示它是特定于实现的。调用约定与系统和CPU架构紧密相关。这个似乎与x86 32位模式有关。
一些建议:
register
#define
,并确保条件编译它在平台/编译器上没有任何定义(它对于DLL这个方法通常,具有特定于库的#define
)。 extern "C"
),因为这是标准支持的唯一调用约定相关语义。 其他信息: