未定义的vtable C++

yas*_*ith 1 c++ g++

#include <stdio.h>

class A {
public:
  virtual void print();
  A();
};

class B :public A {
public:
  void print();
  B();
};

class C :public B {
public:
  void print();
  C();
};

A::A(){
}

B::B(){
}

C::C(){
}

void B::print() {
  printf("From B\n");
}

void C::print() {
  printf("From C\n");
}

int main() {
  B* object = new C;
  object->print();

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译此C++文件时,出现以下错误.无法弄清楚原因.我试着在SO上阅读类似的未定义的vtable问题.

/tmp/ccpOkVJb.o: In function `A::A()':
test1.cpp:(.text+0xf): undefined reference to `vtable for A'
/tmp/ccpOkVJb.o:(.rodata._ZTI1B[_ZTI1B]+0x10): undefined reference to `typeinfo for A'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

Luc*_*ore 7

如果A::print()不打算实现,请将其声明为纯:

class A {
public:
  virtual void print() = 0;
  A();
};
Run Code Online (Sandbox Code Playgroud)

否则,实现它.