2012-01-21 18 views
12

Duplicar posible:
g++ undefined reference to typeinfo
Undefined symbols “vtable for …” and “typeinfo for…”?referencia indefinida a `typeinfo para la clase

no puedo usar mi clase.

class Accel { 
public: 
    virtual void initialize(void); 
    virtual void measure(void); 
    virtual void calibrate(void); 
    virtual const int getFlightData(byte); 
}; 
class Accel_ad : public Accel { 
public: 
    Accel_ad() : Accel(){} 
    void initialize(void) {/*code code code...*/} 
    void measure(void) {/*measure code*/} 
    const int getFlightData(byte axis){/*getting data*/} 
    void calibrate(void) { 
     int findZero[FINDZERO]; 
     int dataAddress; 
     uint8_t data[2]; 
     for (byte calAxis = XAXIS; calAxis < ZAXIS; calAxis++) { 
      if (calAxis == YAXIS) dataAddress = 0x32; 
      if (calAxis == XAXIS) dataAddress = 0x34; 
      if (calAxis == ZAXIS) dataAddress = 0x36; 
      for (byte i=0; i<FINDZERO; i++) { 
       readReverseWordI2C(dataAddress,data); 
       findZero[i] = (data[1] << 8) | (data[0]);; 
       Delay_ms(10); 
      } 
      accelZero[calAxis] = findMedian(findZero, FINDZERO); 
     } 

     // replace with estimated Z axis 0g value 
     accelZero[ZAXIS] = (accelZero[XAXIS] + accelZero[PITCH])/2; 
     // store accel value that represents 1g 
     measure(); 
     accelOneG = -accelData[ZAXIS]; 
    } 

main.cpp

Accel_ad accel;//all ok 
accel.initialize();//all ok 
accel.calibrate();//ERROR: undefined reference to `typeinfo for Accel' 
accel.measure();//All okey 

que saben lo que está mal?

+1

Deja la * * error exacto completa compilación. – Nawaz

+0

[cc] .. \ obj \ main.o :(. Rodata._ZTI8Accel_ad [typeinfo for Accel_ad] + 0x8): referencia indefinida a 'typeinfo for Accel ' [cc] collect2: ld devuelto 1 estado de salida – SevenDays

+0

@wsevendays: por favor actualice la pregunta con el mensaje de error exacto. En general, responda a las solicitudes de aclaraciones actualizando su publicación, en lugar de responder con un comentario. Por un lado, una pregunta debe ser comprensible sin leer comentarios. Por otro lado, SO es un QA & sitio, no un foro, y los comentarios no están destinados (ni son adecuados) para las discusiones. – outis

Respuesta

40

Debe o bien proporcionar una definición de las funciones virtuales en su clase base o declararlos puros:

class Accel { 
public: 
    virtual void initialize(void) = 0;  //either pure virtual 
    virtual void measure(void) = 0; 
    virtual void calibrate(void) {};   //or implementation 
    virtual const int getFlightData(byte) {}; 
}; 
+0

Encontré que si comento la línea "measure();" mi código compila, pero por qué no puedo llamar a la función "measure();" de la clase en sí? – SevenDays

+0

@wsevendays es el problema con medir o calibrar? –

+0

Al final de la función calibrar invoco función de medida, pero mi código falla. – SevenDays