C++ 使用父类clode实现纯虚函数

C++ 使用父类clode实现纯虚函数,c++,C++,在下面的简化示例中,我尝试使用已经存在的父级实现(从接口)实现一个函数。 我想知道是否有人能解释为什么这不起作用,是否有一个简单的解决办法 using namespace std; struct IInterface { virtual void vFunction () = 0; }; struct Base { void vFunction () { } }; struct A: public Base, public IInterface { using Base::vF

在下面的简化示例中,我尝试使用已经存在的父级实现(从接口)实现一个函数。 我想知道是否有人能解释为什么这不起作用,是否有一个简单的解决办法

using namespace std;

struct IInterface
{
  virtual void vFunction () = 0;
};

struct Base
{
  void vFunction () { }
};

struct A: public Base, public IInterface
{
  using Base::vFunction;
  //virtual void vFunction() { Base::vFunction(); } // Is this the only way to reuse Base code?
};

int main ()
{    
  A a;
  IInterface *pInterface = &a;

  a.vFunction();

  pInterface->vFunction();

  return 0;
}
错误是:

main.cpp: In function 'int main()':
main.cpp:21:9: error: cannot declare variable 'a' to be of abstract type 'A'
       A a;
         ^
main.cpp:13:12: note:   because the following virtual functions are pure within 'A':
     struct A: public Base, public IInterface
            ^
main.cpp:5:20: note:    virtual void IInterface::vFunction()
       virtual void vFunction () = 0;
                    ^

base
中的
vFunction
i界面中的
vFunction
没有关系。正因为如此,编译器无法自动使用其中一个来代替另一个。您的转发代码是实现此目的的唯一方法。

您已经有了解决方案,还需要什么?您已经在下面的一条评论中回答了自己的问题!实际上另一个更好的方法是,
Base
IInterface
@Slava继承。这里没有任何论据,但我想,OP有理由不这么做。我几乎看不到任何理由。@Slava我相信,问题应该从表面上看,除非它们没有意义。可以想象,OP有一个第三方类,该类实现其接口的一些功能并希望使用它们。第三方类有一个方法,其签名保证与
IInterface
中的签名匹配。你是认真的吗?