Tengo una clase Base
con una función virtual pura f()
. Otra clase Derived
deriva de Base
. Llamo al f()
desde Derived
. Y usando g ++, recibo un error del enlazador.¿Por qué no se queja g ++ cuando la clase derivada llama a la función virtual pura de la 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
Me parece que el error fue capturado por el vinculador. ¿Por qué el compilador no informó este error? ¿Por qué dejarlo al enlazador?
Aquí está el código:
#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;
}
¿Podría mostrar el código fuente? Eso lo haría mucho más fácil de entender. –
Por favor, muestre su código de ejemplo. Sin eso, será difícil responder. –