Marca referencia indefinida en v table
Hice una clase padre, que es vehículos, el cual es heredado por dos clases hija.
Cuando no incluyo las clases hijas el programa compila y genera el *.exe.
Pero cuando incluyo las dos clases hijas manda este error:
(.text$ZN9VehiculosC2EPcS0_S0_S0_S0[_ZN9VehiculosC2EPcS0_S0_S0_S0]+0xa): undefined reference to `vtable for Vehiculos'
collect2.exe: error: ld returned 1 exit status
Ya busque e hice de nuevo mi código, pero aun así me marca error.
Esta es mi clase padre:
#ifndef __VEHICULOS_H__
#define __VEHICULOS_H__
class Vehiculos
{
protected:
char *nombreCom;
char *nombreP;
char *origen;
char *destino;
char *FechaS;
long double CostoTotal;
public:
Vehiculos(char *nombreCom, char *nombreP, char *origen, char *destino, char *FechaS)
{
this->nombreCom = nombreCom;
this->nombreP = nombreP;
this->origen = origen;
this->destino = destino;
this->FechaS = FechaS;
this->CostoTotal = 0;
};
virtual long double CalcularPresioTotal(float);
};
#endif
Estas son mis clases hijas:
#ifndef __TAXI_H__
#define __TAXI_H__
#include "Vehiculos.h"
class Taxi : public Vehiculos
{
private:
char *matricula;
public:
Taxi(char *);
~Taxi();
long double CalcularPresioTotal(float);
};
Taxi::Taxi(char *matricula) : Vehiculos(nombreCom, nombreP, origen, destino, FechaS)
{
this->matricula = matricula;
}
Taxi::~Taxi()
{
}
long double Taxi::CalcularPresioTotal(float kmrecorridos)
{
this->CostoTotal = kmrecorridos * 1;
return (this->CostoTotal += 20);
}
#endif
#ifndef __AVION_H__
#define __AVION_H__
#include "Vehiculos.h"
enum Categorys
{
PrimeraClase = 1,
ClaseTurusta = 2
};
class Avion : public Vehiculos
{
private:
char *NumV = new char[6];
char *asiento = new char[2];
Categorys categoria;
public:
Avion(char *, char *, Categorys);
~Avion();
long double CalcularPresioTotal(float);
};
Avion::Avion(char *NumV, char *asiento, Categorys categoria) : Vehiculos(nombreCom, nombreP, origen, destino, FechaS)
{
this->NumV = NumV;
this->asiento = asiento;
this->categoria = categoria;
}
Avion::~Avion()
{
}
long double Avion::CalcularPresioTotal(float kmrecorridos)
{
this->CostoTotal = kmrecorridos * 3;
return (this->CostoTotal += this->CostoTotal);
}
#endif
#ifndef __AUTOMOVIL_H__
#define __AUTOMOVIL_H__
#include "Vehiculos.h"
enum TypePasangers
{
nino = 1,
adulto = 2,
mayor = 3
};
class Autobus : Vehiculos
{
private:
TypePasangers tipoDePasagero;
int NumAsiento;
public:
Autobus(TypePasangers, int);
~Autobus();
long double CalcularPresioTotal(float);
};
Autobus::Autobus(TypePasangers tipoDePasagero, int NumAsiento) : Vehiculos(nombreCom, nombreP, origen, destino, FechaS)
{
this->tipoDePasagero = tipoDePasagero;
this->NumAsiento = NumAsiento;
}
Autobus::~Autobus()
{
}
long double Autobus::CalcularPresioTotal(float kmRecorridos)
{
if (this->tipoDePasagero == TypePasangers::mayor)
{
this->CostoTotal = (kmRecorridos * 2) / 2;
}
else
{
this->CostoTotal = kmRecorridos * 2;
}
return this->CostoTotal;
}
#endif