体系结构x86_64 vtable的未定义符号

Undefined symbols for architecture x86_64 vtable

本文关键字:未定义 符号 vtable x86 体系结构      更新时间:2023-10-16

我正试图在NetbeansC++for mac中执行一个项目,当我为一个名为servicio的类执行简单构造函数时,编译器会向我显示以下错误:

"/Applications/Xcode.app/Contents/Developer/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
"/Applications/Xcode.app/Contents/Developer/usr/bin/make"  -f nbproject/Makefile-Debug.mk dist/Debug/GNU-MacOSX/medicos
mkdir -p dist/Debug/GNU-MacOSX
g++     -o dist/Debug/GNU-MacOSX/medicos build/Debug/GNU-MacOSX/agenda.o build/Debug/GNU-MacOSX/cita.o build/Debug/GNU-MacOSX/contenedor.o build/Debug/GNU-MacOSX/doctor.o build/Debug/GNU-MacOSX/fecha.o build/Debug/GNU-MacOSX/main.o build/Debug/GNU-MacOSX/objetoBase.o build/Debug/GNU-MacOSX/paciente.o build/Debug/GNU-MacOSX/padecimiento.o build/Debug/GNU-MacOSX/servicio.o 
Undefined symbols for architecture x86_64:
  "vtable for servicio", referenced from:
      servicio::servicio(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in servicio.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [dist/Debug/GNU-MacOSX/medicos] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

我真的不确定可能是什么问题,我是一个编程初学者,所以我对此了解不多,谢谢你的帮助。

PSA,因为这是谷歌搜索的热门结果:如果你使用Qt,这个错误也可能意味着你没有为该类构建MOC对象文件。

链接器打印这些错误,因为函数的定义不存在。您声明了3个函数,但只定义了构造函数。

擦除virtual会有所帮助,因为这样链接器就不需要这些函数了。对于virtual,链接器使用它们来创建vtable。

如果您在程序中的任何其他位置使用这些函数而没有定义它们,则会返回错误。

如果您使用QT,在绝大多数情况下,您会得到vtable错误,因为在将Q_OBJECT宏添加到文件后,您没有重新运行qmake

信用额度:https://forum.qt.io/post/178663

注意:缺少vtable通常意味着第一个非内联虚拟成员函数没有定义。

那么,您声明的两个函数的定义在哪里呢?

virtual string toString() const;
virtual ~servicio();

它们不存在。编译器告诉你它们不存在。不,我花时间告诉你,编译器告诉你它们不存在,它们不存在。

这就是为什么编译器告诉你它们不存在的原因。因为它们不存在。