为什么我的C++编译器说虚拟成员没有定义?

gwg*_*gwg 2 c++ g++

这个问题可能是重复的,但我不确定,因为我的程序在一个文件中.

// my-program.cpp

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

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

int main()
{
  B myB;
}
Run Code Online (Sandbox Code Playgroud)

然后我输入g++ my-program.cpp终端,编译器给我这个警告:

用于体系结构x86_64的未定义符号:"typeinfo for A",引用自:bin信息为cce8BmNY.o"vtable for A",引用自:c :: -inline虚拟成员函数没有定义.ld:找不到架构的符号x86_64 collect2:ld返回1退出状态

Mik*_*our 7

它说没有定义,因为没有定义.你已经宣布A::foo(),但没有定义它.

也许你希望它是纯虚拟的(使基类A抽象):

virtual void foo() = 0;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它不需要定义,因为它将始终在可以实例化的任何类中被重写.

或许您希望能够A直接实例化,在这种情况下,它需要一个定义.