¿Es esencial tener una definición para una función virtual?¿Debería una función virtual esencialmente tener una definición?
Considere este programa muestra a continuación:
#include <iostream>
using namespace std;
class base
{
public:
void virtual virtualfunc();
};
class derived : public base
{
public:
void virtualfunc()
{
cout << "vf in derived class\n";
}
};
int main()
{
derived d;
return 0;
}
Esto le da al enlace de error:
In function
base::base()
:: undefined reference tovtable for base
que no tienen la definición para la función virtual en la clase base. ¿Por qué ocurre este error aunque no haya invocado explícitamente la función virtual?
Lo interesante que encuentro es que si no instalo un objeto de la clase derived
, el error de enlace ya no existe. ¿Por qué es esto? ¿Qué tiene que ver la creación de instancias con el error de enlace anterior?
Vuelva a su edición: si no instancia un 'derivado' o una' base', ¿por qué el enlazador tiene que hacer algo con cualquier método de esas dos clases? Si no se hace referencia a las clases, el vinculador no tiene ninguna razón para intentar buscarlas en los archivos del objeto. (A menos que esté construyendo una biblioteca.) – Mat
@Mat: Estoy de acuerdo :) –