我在一个DLL中定义了一个类,其中某个成员被重载。 第二个DLL导入该类,从中继承并导出继承的类。继承的类会覆盖上述成员的一个重载,因此会丢失所有其他重载。
这个问题的解决方案AFAIK通常使用using
语句(using BaseClass::OverloadedMember;
),但考虑到这种情况,我得到error C2487: 'BaseClass::OverloadedMember' : member of dll interface class may not be declared with dll interface
(VC ++)。
我该如何解决这个问题?
答案 0 :(得分:2)
我将从新的DLL /类导出所有版本的重载函数。因此,不是使用using
语句来公开基类版本,因为在这种情况下你不需要更改它们,我将实现显式调用基类版本的简单转发函数。我希望这可以解决您遇到的问题;但它不太理想。
答案 1 :(得分:1)
好吧,我无法测试细节,因为我没有VC ++,但一种方法是在基类中重新定义所有重载的方法并单独导出它们。
请记住,对于C ++来说,VC ++的导入/导出从未被认为是正确的。因此,您应该根据C ++特性保持导出类的简单性(using
语句对于此目的而言过于复杂。)