类构造函数中的类型转换不正确

Improper typecasting in Class constructor

本文关键字:类型转换 不正确 构造函数      更新时间:2023-10-16

我刚接触C++,对类有问题。

我得到了这个原型

class MMA7455 : public Accel
{
public:
    MMA7455(uint8_t);
    uint8_t accel_get_data(acceleration_t*);
private:
    uint8_t accel_data_ready(void);
};

我想创建一个实例

MMA7455 accel = MMA7455(0x21);

但是以下消息出现

In function `global constructors keyed to accel':
sensors.cpp:(.text+0x8): undefined reference to `MMA7455::MMA7455(unsigned char)'

为什么要查找"unsigned char"参数?即使我试图隐式转换常量的类型,也会收到相同的消息

MMA7455 accel = MMA7455((uint8_t)0x21);

您可能没有链接包含构造函数定义的.cpp文件。"uint8_t"是"unsigned char"的typedef。

您需要在程序中的某个位置定义MMA7455::MMA7455(uint8_t),即在原型中的定义之后添加一个{}-主体(或者您可能忘记编译并链接包含MMA7455定义的cpp文件。

它查找unsigned char,因为uint8_t恰好是系统上unsigned chartypedef

uint8_t是您平台上unsigned char的typedef。该错误是链接器错误,因为您尚未为构造函数提供实现,并且与参数是否为unsigned char无关。