如何从实现与其他接口共享的接口的类继承

时间:2017-12-12 12:14:59

标签: c++ interface multiple-inheritance

我有这个示例代码:

#include <iostream>

struct Interface1
{
    virtual int getID()=0;
};

struct Interface2 : Interface1
{
    virtual int add(int a,int b)=0;
};

struct Base1 : Interface1
{
     virtual int getID() override { return 1; }
};

struct myClass: Interface2, Base1
{
    virtual int add(int a,int b) override { return a+b; }
};

int main()
{
    myClass c;     
    std::cout << c.add(0, 1) << "\n";
}

这个想法是myClass基于Interface2,但使用Base1作为Interface1的实现。当我编译这段代码时,我收到了这个错误:

getId is ambiguous. 

我该如何解决?

1 个答案:

答案 0 :(得分:3)

问题是myClassInterface1继承两次(一次来自Interface1,一次来自Base1),因此继承了两个纯虚函数({{1}和myClass::getID)。由于只实现了其中一个,如果您尝试创建一个Base1::getID对象,编译器会抱怨myClass是一个抽象类型。这是对的。

解决方案(除了使用更简单的继承)将使您的类虚拟地从myClass继承:

Interface1