pure virtual i błąd linkera

0

Mam plik A.h i w nim:

class A{
public:
virtual bool a() const = 0;
};
template<class T>
class B: public A {
bool empty() const;
};

Plik A.cpp:

...
#include "A.h"
template <class T>
bool B<T>::a() const {
return true;
}
 

I przy linkowaniu pojawia się unresolved external ..., czyli brak nadpisania metody a. Gdy w klasie B bezposrenio wpisze cialo metody a to sie kompiluje, o co chodzi, thx.

0

w klasie B jest ofc metoda a, a nie empty...

1

Metody szablonowe nie mogą być virtual. Dodatkowo, poza szczególnymi przypadkami (ograniczenie użycia metody do jednej jednostki kompilacji, wygenerowanie ukonkretnień a priori), wszystko co szablonowe powinno być w całości w pliku nagłówkowym. Można kombinować z dodatkowym include ale to w zasadzie tylko kosmetyka.

0

Mhm, Dziękuję.

0

Po prostu definiujesz metodę, która nie ma deklaracji w klasie. To, że akurat jest to klasa szablonowa i w klasie bazowej jest metoda czysto wirtualna nie ma nic do rzeczy. W zwykłaj klasie i przy zwykłaych metodach też by nie przeszło. Po prostu brakuje deklaracji (przesłonięcia) definiowanej metody.
Wpisanie bezpośrednio (w deklaracji klasy) to deklaracja z definicją zatem wszystko w porządku.

Off-topic.
Dzięki za zwrócenie uwagi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1