C++嵌入式小白,编写AS5600驱动时编译器报错:
In function `AS5600myIIC::AS5600myIIC()':
AS5600myIIC.cpp:(.text._ZN11AS5600myIICC2Ev+0x38): undefined reference to `vtable for AS5600myIIC'
头文件如下:
#ifndef __AS5600myIIC_H
#define __AS5600myIIC_H
#include "sys.h"
#define _raw_ang_hi 0x0c
#define _raw_ang_lo 0x0d
#define AS5600_CPR 4096
class AS5600myIIC
{
public:
long cpr;
float full_rotation_offset;
long angle_data_prev;
float angle_prev;
unsigned long velocity_calc_timestamp;
AS5600myIIC(void);
virtual ~AS5600myIIC(void);
void AS5600_Init(void);
u16 getRawCount(void);
float getAngle(void);
float getVelocity(void);
private:
u8 AS5600_ReadOneByte(u16 ReadAddr);
void AS5600_WriteOneByte(u16 WriteAddr,u8 WriteData);
u16 AS5600_ReadTwoByte(u16 ReadAddr_hi,u16 ReadAddr_lo);
};
#endif // !__AS5600myIIC_H
报错的原因是析构函数没有具体的实现
解决的方法是构建析构函数,或者再析构函数后面加{}。修改后的头文件如下:
#ifndef __AS5600myIIC_H
#define __AS5600myIIC_H
#include "sys.h"
#define _raw_ang_hi 0x0c
#define _raw_ang_lo 0x0d
#define AS5600_CPR 4096
class AS5600myIIC
{
public:
long cpr;
float full_rotation_offset;
long angle_data_prev;
float angle_prev;
unsigned long velocity_calc_timestamp;
AS5600myIIC(void);
virtual ~AS5600myIIC(void){}; //添加{}
void AS5600_Init(void);
u16 getRawCount(void);
float getAngle(void);
float getVelocity(void);
private:
u8 AS5600_ReadOneByte(u16 ReadAddr);
void AS5600_WriteOneByte(u16 WriteAddr,u8 WriteData);
u16 AS5600_ReadTwoByte(u16 ReadAddr_hi,u16 ReadAddr_lo);
};
#endif // !__AS5600myIIC_H