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

青蛙

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

// 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的未定义符号:“ A的typeinfo”,引用自:Bin cce8BmNY.o的typeinfo“ A的vtable”,引用自cce8BmNY.o中的A :: A()注意:丢失的vtable通常表示第一个非-inline虚拟成员函数没有定义。ld:找不到针对架构x86_64 collect2的符号:ld返回1退出状态

迈克·西摩

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

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

virtual void foo() = 0;

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么C#编译器说字符串没有`Contains`方法

为什么我的Mac上的任何C编译器上都没有定义timespec_get?

为什么我的编译器说我的函数被定义了多次?

在C#中为什么我可以将接口转换为任何类型而没有编译器错误

为什么我的 C++ 图形程序没有使用 g++ 编译器显示任何输出?

为什么编译器没有警告我有关空的if语句?

为什么我的程序没有显示任何输出?0 错误,0 警告但没有输出?我正在使用 Dev C++ 编译器

当我尝试覆盖静态方法时,为什么编译器没有抱怨?

为什么编译器说我的过程中未声明我的表单变量?

为什么编译器没有给出冲突的错误?

为什么编译器没有优化此负载

编译器说有一个无法到达的语句,我在做什么错?

在constexpr函数中返回C字符串:为什么编译器没有警告?

为什么C ++编译器没有优化未使用的参考变量?

为什么C编译器没有在for循环体内给出重新声明错误?

为什么C#编译器没有抛出任何错误?

为什么此代码在在线 C++ 编译器上没有输出?

为什么即使函数没有在 main 之前声明,这个在线编译器也允许我编译代码?

将字符串文字分配给非const指针时,为什么我的C编译器没有警告?

C ++编译器访问静态成员和访问普通成员的方式有什么区别?

为什么配置说在安装GCC时找不到C编译器?

当类具有引用成员时,为什么C ++编译器不删除副本构造函数?

为什么我的GCC编译器不编译C代码?

C ++编译器:“类std :: vector <std :: vector <char>>”没有名为“ emplace_back”的成员

当我们尝试将变量除以零时,为什么编译器没有显示错误

为什么我可以在没有编译器错误的情况下将错误的接口传递给函数?

编译器说,当我将参数定义为struct *时,其类型为struct **

我定义的类的成员出现C ++ Vector数据类型编译器错误问题

为什么我的编译器无法识别#include <thread>(c ++)?