Właśnie natrafiłem na następujący błąd (i znalazłem rozwiązanie online, ale nie występuje ono w przepełnieniu stosu):
(.gnu.linkonce. [stuff]): niezdefiniowane odniesienie do [metody] [plik obiektowy] :(. gnu.linkonce. [stuff]): niezdefiniowane odniesienie do `typeinfo for [classname] '
Dlaczego można dostać jeden z tych błędów linkera „niezdefiniowane odniesienie do typeinfo”?
(Punkty bonusowe, jeśli potrafisz wyjaśnić, co dzieje się za kulisami.)
virtual void abc() =0;
(jeśli wersja podstawowa nigdy nie jest wywoływana)
abc()
ten sposób, możesz łatwo zapomnieć o przedefiniowaniu abc()
w klasie pochodnej i pomyśleć, że wszystko jest w porządku, ponieważ nadal będziesz mógł wywoływać tę funkcję bez żadnego problemu. Dobra praktyka implementacji funkcji czysto wirtualnych znajduje się w tym artykule i polega na tym, aby funkcja wypisała „czystą funkcję wirtualną o nazwie”, a następnie zawiesiła program.
= 0;
.