我正在尝试使用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)
?这不是标准的数学函数吗?
我是否正确地假设我在某处遗漏了包含或名称空间声明,并且不应该自己定义此函数?
答案 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)'
编译器无法解析为正确的特化,因为参数的类型不符合(匹配)。
uint8_t
参数fifoCount
静态向上转换为int
,如std::min(static_cast<int>(fifoCount), 128)
std::min<int>(fifoCount, 128)