调用'min(uint8_t&, int)'没有匹配函数

No matching function for call to 'min(uint8_t&, int)'

本文关键字:函数 int min uint8 调用      更新时间:2023-10-16

我正试图用gcc编译一些c++i2cdevlib代码,但我收到了错误:

/usr/share/arduino/libraries/i2cdevlib/Arduino/MPU9150/MPU9150_9Axis_MotionApps41.h: In member function 'uint8_t MPU9150::dmpInitialize()':
/usr/share/arduino/libraries/i2cdevlib/Arduino/MPU9150/MPU9150_9Axis_MotionApps41.h:605:56: error: no matching function for call to 'min(uint8_t&, int)'
             getFIFOBytes(fifoBuffer, min(fifoCount, 128)); // safeguard only 128 bytes
                                                        ^

为什么没有定义min(uint8_t&, int)?这不是一个标准的数学函数吗?

我是否正确地假设我在某个地方缺少include或命名空间声明,并且不应该自己定义这个函数?

传递给std::min的参数不同:一个是uint8_t,另一个是int

std::min的功能类型如下:

template< class T > 
const T& min( const T& a, const T& b );

您需要告诉编译器std::min的类型参数是什么。

因此,解决方案是:

std::min<int>(fifoCount, 128);

您的错误消息显示全部为

error: no matching function for call to 'min(uint8_t&, int)'

由于参数的类型不一致(匹配),编译器无法解析为正确的专用化。

  1. std::min(static_cast<int>(fifoCount), 128)中那样,将uint8_t参数fifoCount静态上变频到int
  2. 或者,明确指定要专门化std::min<int>(fifoCount, 128)的类型