2012-01-21 37 views
12

thể trùng lặp:
g++ undefined reference to typeinfo
Undefined symbols “vtable for …” and “typeinfo for…”?tài liệu tham khảo không xác định cho `typeinfo cho lớp

tôi không thể sử dụng lớp học của tôi.

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 

Ai biết chuyện gì vậy?

+1

Post * chính xác * lỗi đầy đủ biên dịch. – Nawaz

+0

[cc] .. \ obj \ main.o: (. Rodata._ZTI8Accel_ad [typeinfo for Accel_ad] + 0x8): undefined tham chiếu đến 'typeinfo for Accel ' [cc] collect2: ld trả về 1 trạng thái thoát – SevenDays

+0

@wsevendays: vui lòng cập nhật câu hỏi với thông báo lỗi chính xác. Nói chung, hãy trả lời các yêu cầu làm rõ bằng cách cập nhật bài đăng của bạn, thay vì trả lời bằng nhận xét. Đối với một điều, một câu hỏi phải dễ hiểu mà không đọc nhận xét. Đối với người khác, SO là một QA & trang web, không phải là một diễn đàn, và các ý kiến ​​không được dự định (cũng không phải là họ rất thích hợp) cho các cuộc thảo luận. – outis

Trả lời

40

Bạn phải thể cung cấp một định nghĩa cho các chức năng ảo trong lớp cơ sở của bạn hoặc tuyên bố họ tinh khiết:

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

Tôi thấy rằng nếu tôi nhận xét dòng "measure();" mã của tôi biên dịch, nhưng tại sao tôi không thể gọi hàm "measure();" từ chính lớp đó? – SevenDays

+0

@wsevendays là vấn đề với biện pháp hoặc hiệu chỉnh? –

+0

Khi kết thúc chức năng hiệu chuẩn, tôi gọi hàm đo, nhưng mã của tôi không thành công. – SevenDays

Các vấn đề liên quan