C++ 对“类的类型信息”的未定义引用
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/8951884/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
undefined reference to `typeinfo for class'
提问by SevenDays
Possible Duplicate:
g++ undefined reference to typeinfo
Undefined symbols “vtable for …” and “typeinfo for…”?
可能的重复:
g++ 未定义引用 typeinfo
未定义符号“vtable for ...”和“typeinfo for...”?
I can't use my class.
我不能用我的课。
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
Who know what's wrong?
谁知道怎么回事?
The entire error I get is:
我得到的整个错误是:
.\obj\main.o:(.rodata._ZTI8Accel_ad[typeinfo for Accel_ad]+0x8): undefined reference to `typeinfo for Accel' [cc] collect2: ld returned 1 exit status
.\obj\main.o:(.rodata._ZTI8Accel_ad[typeinfo for Accel_ad]+0x8):未定义对`typeinfo for Accel'的引用[cc] collect2:ld返回1个退出状态
回答by Luchian Grigore
You must either provide a definition for virtual functions in your base class or declare them pure:
您必须在基类中为虚函数提供定义或将它们声明为纯函数:
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) {};
};