2012-01-21 12 views
12

Powiel możliwe:
g++ undefined reference to typeinfo
Undefined symbols “vtable for …” and “typeinfo for…”?niezdefiniowana odniesienia do `typeinfo dla klasy

Nie mogę korzystać z mojej klasy.

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 

Kto wie, co się dzieje?

+1

opublikować * * dokładny błąd pełna kompilacja. – Nawaz

+0

[cc] .. \ obj \ main.o :(. Rodata._ZTI8Accel_ad [typeinfo dla Accel_ad] + 0x8): niezdefiniowane odniesienie do 'typeinfo for Accel ' [cc] collect2: ld zwrócił 1 status wyjścia – SevenDays

+0

@wsevendays: proszę zaktualizować pytanie dokładnym komunikatem o błędzie. Generalnie odpowiadaj na prośby o wyjaśnienia, aktualizując swój wpis, zamiast odpowiadać komentarzem. Po pierwsze, pytanie powinno być zrozumiałe bez czytania komentarzy. Po drugie, SO to QA i strona, a nie forum, a komentarze nie są przeznaczone (ani nie są dobrze dopasowane) do dyskusji. – outis

Odpowiedz

40

Musisz albo dostarczyć definicję funkcji wirtualnych w klasie bazowej lub zadeklarować je czystą:

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

Znalazłem, że jeśli komentarz linii "measure();" mój kod się kompiluje, ale dlaczego nie mogę wywołać funkcji "measure();" z samej klasy? – SevenDays

+0

@wsevendays jest problemem z pomiarem lub skalibrowaniem? –

+0

Po zakończeniu kalibracji funkcji wywołuję funkcję pomiaru, ale mój kod kończy się niepowodzeniem. – SevenDays

Powiązane problemy