C ++无法从基类中找到方法定义

时间:2016-05-10 22:53:50

标签: c++

我写了以下代码:

class A {
public:
  virtual void a() = 0;
  virtual ~A();
};

class B: public A {
public:
  virtual void b() = 0;
  virtual ~B();
};

class C: public A {
public:
  void a() override {}
};

class D: public B, public C {
  void b() override {}
};

int main(int, char**) {
  B* b = new D();
  return 0;
}

然而,当我编译它时,gcc(来自ubuntu 14.04的4.8.4)在实例化类型D的对象时无法从基类C中找到方法A :: a()的定义:

$ g++ --std=c++11 test.cc
test.cc: In function 'int main(int, char**)':
test.cc:22:16: error: cannot allocate an object of abstract type 'D'
   B* b = new D();
                ^
test.cc:17:7: note:   because the following virtual functions are pure within 'D':
 class D: public B, public C {
       ^
test.cc:3:16: note:     virtual void A::a()
   virtual void a() = 0;

当我明确地将A添加为D的基类时,我收到警告:

test.cc:17:7: warning: direct base 'A' inaccessible in 'D' due to ambiguity [enabled by default]
 class D: public A, public B, public C {
       ^

我的印象是,只有在多个路径上从具有数据成员的基类继承时,“可怕的钻石”才适用。我错了吗?或者这应该有用吗?

0 个答案:

没有答案