Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con clase base y derivada

Estas en el tema de Problema con clase base y derivada en el foro de C/C++ en Foros del Web. Hola buenas, estoy intentando compilar el siguiente codigo, y me aparecen unos errores de compilacion que no consigo entender/arreglar. El caso es que todo codigo, ...
  #1 (permalink)  
Antiguo 23/06/2008, 04:55
 
Fecha de Ingreso: junio-2008
Mensajes: 2
Antigüedad: 15 años, 10 meses
Puntos: 0
Problema con clase base y derivada

Hola buenas, estoy intentando compilar el siguiente codigo, y me aparecen unos errores de compilacion que no consigo entender/arreglar. El caso es que todo codigo, a excepcion del que se encuentra en el main ha sido generado como un resultado del programa xFuzzy, asi que en principio este no deberia tener problemas. El codigo que provoca el error, de forma simplificada es el siguiente:



Código:
(en xfuzzy.h)

class FuzzyInferenceEngine {
public:
 virtual double* crispInference(double* input) = 0;
 virtual double* crispInference(MembershipFunction* &input) = 0;
 virtual MembershipFunction** fuzzyInference(double* input) = 0;
 virtual MembershipFunction** fuzzyInference(MembershipFunction* &input) = 0;
};

(en esp_9_class_ideal.h)

class esp_9_class_ideal: public FuzzyInferenceEngine {
public:
 esp_9_class_ideal() {};
 virtual ~esp_9_class_ideal() {};
 virtual double* crispInference(double* input);
 virtual double* crispInference(MembershipFunction* &input);
 virtual MembershipFunction** fuzzyInference(double* input);
 virtual MembershipFunction** fuzzyInference(MembershipFunction* &input);
 void inference( double _i_speed, double _i_steer, double _i_ang_vel, double _i_lat_force, double *_o_oversteer );
private:
 void RL_esp(MembershipFunction &speed, MembershipFunction &steer, MembershipFunction &ang_vel, MembershipFunction &lat_force, MembershipFunction ** _o_oversteer_9);
};


(en main.c)

int main( int argc, char **argv ) {

  esp_9_class_ideal esp9ideal;
...

  esp9ideal.inference((double)vel2, (double)steer, (double) angvel, (double)lat_force, & oversteer);

...
}
y los errores que obtengo son los siguientes:

offroad-main.o: In function `esp_9_class_ideal':
esp_9_class_ideal.h:175: undefined reference to `vtable for esp_9_class_ideal'
In function `main':
/main.cpp:439: undefined reference to `esp_9_class_ideal::inference(double, double, double, double, double*)'
offroad-main.o: In function `~esp_9_class_ideal':
/esp_9_class_ideal.h:176: undefined reference to `vtable for esp_9_class_ideal'

Si comento/elimino la llamada a inference en el main desaparecen los errores de compilacion. No entiendo que es lo que estoy haciendo mal!!! A que se deben los errores "undefined reference to `vtable for esp_9_class_ideal'" ???

Muchas gracias
  #2 (permalink)  
Antiguo 23/06/2008, 17:59
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Problema con clase base y derivada

En la clase base has definido los metodos virtuales puros, por tanto la clase no puede ser instanciada a menos q definas los metodos que has definido como virtuales en la clase derivada. Si quieres que solo compile te recomiendo agregar un par de llaves a cada metodo, o mejor un { return 0; } para que las funciones algo devuelvan. Posteriormente tienes que definir algo con mas sentido.
  #3 (permalink)  
Antiguo 24/06/2008, 02:02
 
Fecha de Ingreso: junio-2008
Mensajes: 2
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Problema con clase base y derivada

Cita:
En la clase base has definido los metodos virtuales puros, por tanto la clase no puede ser instanciada a menos q definas los metodos que has definido como virtuales en la clase derivada. Si quieres que solo compile te recomiendo agregar un par de llaves a cada metodo, o mejor un { return 0; } para que las funciones algo devuelvan. Posteriormente tienes que definir algo con mas sentido.
Bueno, lo cierto es que no lo puse en el codigo por no alargar la cosa, pero las instancias de los metodos que aprecen en la clase derivada estan todos instanciados, es decir, todos tienen una definicion valida, a excepcion del constructor y destructor, que si que tienen llaves.

Por cierto, se me olvido comentar que el problema viene al linkar el programa (como se puede apreciar, los errores aparecen en el offroad-main.o).
  #4 (permalink)  
Antiguo 24/06/2008, 11:26
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Problema con clase base y derivada

No definas el constructor y el destructor en el archivo .h. Posterga eso y ponlo donde pusiste la definicion de los otros metodos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:49.