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

时间:2016-07-19 04:06:05

标签: c++

我正在尝试使用gcc编译一些c ++ i2cdevlib code并且我收到错误:

/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)?这不是标准的数学函数吗?

我是否正确地假设我在某处遗漏了包含或名称空间声明,并且不应该自己定义此函数?

2 个答案:

答案 0 :(得分:6)

您传递给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);

答案 1 :(得分:1)

您的错误消息说明了一切

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

编译器无法解析为正确的特化,因为参数的类型不符合(匹配)。

  1. uint8_t参数fifoCount静态向上转换为int,如std::min(static_cast<int>(fifoCount), 128)
  2. 或者,明确指定要专注于std::min<int>(fifoCount, 128)
  3. 的类型