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

Why does my C++ compiler say that a virtual member has no definition?

本文关键字:定义 成员 我的 c++ 编译器 为什么      更新时间:2023-10-16

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

// my-program.cpp
class A
{
public:
  virtual void foo();
};
class B : public A
{
public:
  void foo() {}
};
int main()
{
  B myB;
}

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

架构x86_64的未定义符号:"typeinfo for A",引用自:typeinfo for Bin"vtable for A",引用自:A: A()在北京注意:虚函数表缺失通常意味着第一个非内联虚成员函数没有定义。没有找到架构x86_64的Ld:符号

它说没有定义,因为没有定义。您已经声明了A::foo(),但没有定义它。

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

virtual void foo() = 0;

在这种情况下,它不需要定义,因为它总是会在任何可以实例化的类中被覆盖。

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

如果你想有一个没有定义的函数,你应该写virtual void foo() = 0; .