Ho una classe Base
con una pura funzione virtuale f()
. Un'altra classe Derived
deriva da Base
. Chiamo f()
dall'interno di Derived
. E usando g ++, ottengo un errore dal linker.Perché g ++ non si lamenta quando la classe derivata chiama pura funzione virtuale di base?
[[email protected] tmp]$ g++ pure_virtual_function_call.cpp
/tmp/ccGQLHi4.o: In function `Derived::f()':
pure_virtual_function_call.cpp:(.text._ZN7Derived1fEv[_ZN7Derived1fEv]+0x14): undefined reference to `VirtualBase::f()'
collect2: error: ld returned 1 exit status
Mi sembra che l'errore sia stato rilevato dal linker. Perché il compilatore non ha segnalato questo errore? Perché lasciarlo al linker?
Ecco il codice:
#include <iostream>
using namespace std;
class VirtualBase {
public:
virtual void f() = 0;
};
class Derived : public VirtualBase {
public:
void f(){
VirtualBase::f();
cout << "Derived\n" ;
}
};
int main(){
Derived d;
d.f();
return 0;
}
Potresti mostrare il codice sorgente? Ciò renderebbe molto più facile la comprensione. –
Si prega di mostrare il codice di esempio. Senza quello, sarà difficile rispondere. –