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

标签 c++ g++

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

// 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 的 undefined symbol : “A 的类型信息”,引用自: Bin cce8BmNY.o 的类型信息 “A 的 vtable”,引用自: A::A() 在 cce8BmNY.o 注意:缺少 vtable 通常意味着第一个非内联虚拟成员函数没有定义。 ld: 找不到体系结构 x86_64 的符号 collect2: ld 返回了 1 个退出状态

最佳答案

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

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

virtual void foo() = 0;

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

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

关于c++ - 为什么我的 C++ 编译器说虚拟成员没有定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23518458/

相关文章:

c++ - 错误:C2039: 'iswspace':不是 'std' 的成员,但 std::isspace() 编译正常

c++ - glLinkProgram() 在程序执行中未定义,即使 glew 报告它存在

c++ - 重载运算符 [] 以替换 vector 元素

c++ - 使用 g++ 的 Glibc 问题

c++ - GCC/G++ 编译器设置 GUI

c++ - 打包类+继承的内存布局

linux - 以不确定的方式使用 pthreads 时出现段错误

c++ - 无法在未指定捕获默认值的 lambda 中隐式捕获变量

c++ - VS2010 报告 DLL 中静态类的错误内存泄漏

c++ - 私有(private)成员数据的模拟