Чистые виртуальные классы и ошибка неопределенной ссылки на `vtable - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь реализовать чистый виртуальный класс и производный класс, но получаю следующую ошибку:

    /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 голосов
/ 04 октября 2018

В файле bca2016_vol1_amdt1.cpp вы используете неправильное имя класса bca (таким образом, предоставляя реализации для чисто виртуальных функций класса bca, который правильно сформирован).Это должно быть bca2016_vol1_amdt1.

Также bca2016_vol1_amdt1.cpp должно включать bca2016_vol1_amdt1.h.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...