【发布时间】:2015-08-18 10:03:33
【问题描述】:
我有一个像这样的纯虚拟接口类和派生类
class IInterface
{
public:
virtual void func() = 0;
};
class MyClass : public IInterface
{
public:
void func(int i) { func(); }
};
编译器抱怨在func(int i) 中对func() 的调用不接受0 个参数。指定调用纯虚拟成员的正确方法是什么?
我想出的两个解决方案是
void func(int i) { static_cast<IInterface*>(this)->func(); }
和
void func(int i) { IInterface::func(); }
这些都可行吗?有没有更好的办法?两者看起来都很笨重。
【问题讨论】:
-
您的第二个解决方案是正确的方法。
-
为什么要实际调用纯虚方法?
-
void dontHideBaseMembers(int i) { func(); } -
在您的编辑中,您没有在
MyClass中包含func()的正文,因此无论如何它都不会构建。一旦你这样做了,它仍然不起作用吗?如果func在MyClass中定义为无参数重载,它应该可以编译并解决您的问题。 -
@VoidStar 如果 OP 在 MyClass 中定义 func() 他可以直接调用它,不需要任何马戏团
标签: c++ inheritance pure-virtual