C++:undefined reference to `vtable for xxx‘的解决办法

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值