纯虚拟类和对vtable的错误未定义引用

时间:2018-10-04 13:19:19

标签: c++ c++17

我正在尝试实现纯虚拟类和派生类,但出现以下错误。

    /usr/lib64/gcc/x86_64-suse-linux/8/../../../../x86_64-suse-linux/bin/ld: /tmp/ccvROhIa.o: in function `main':
main.cpp:(.text+0x1ea): undefined reference to `vtable for bca2016_vol1_amdt1'
/usr/lib64/gcc/x86_64-suse-linux/8/../../../../x86_64-suse-linux/bin/ld: /tmp/ccvROhIa.o: in function `bca2016_vol1_amdt1::~bca2016_vol1_amdt1()':
main.cpp:(.text._ZN18bca2016_vol1_amdt1D2Ev[_ZN18bca2016_vol1_amdt1D5Ev]+0xd): undefined reference to `vtable for bca2016_vol1_amdt1'
collect2: error: ld returned 1 exit status

我对C ++还是陌生的,所以我试图了解什么是错误的以及为什么它是错误的。从我的研究看来,这主要与链接程序有关,最常见的原因是未声明虚拟函数或未声明虚拟析构函数,尽管我很确定自己已经声明了它吗?

1 个答案:

答案 0 :(得分:2)

在文件bca2016_vol1_amdt1.cpp中,您使用了错误的类名称bca(因此,提供了格式正确的类bca的纯虚函数的实现)。应该是bca2016_vol1_amdt1

此外,bca2016_vol1_amdt1.cpp必须包含bca2016_vol1_amdt1.h