我正在尝试实现纯虚拟类和派生类,但出现以下错误。
/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 ++还是陌生的,所以我试图了解什么是错误的以及为什么它是错误的。从我的研究看来,这主要与链接程序有关,最常见的原因是未声明虚拟函数或未声明虚拟析构函数,尽管我很确定自己已经声明了它吗?
答案 0 :(得分:2)
在文件bca2016_vol1_amdt1.cpp
中,您使用了错误的类名称bca
(因此,提供了格式正确的类bca
的纯虚函数的实现)。应该是bca2016_vol1_amdt1
。
此外,bca2016_vol1_amdt1.cpp
必须包含bca2016_vol1_amdt1.h
。