Нет подходящей функции для вызова min (uint8_t &, int)

c++

3053 просмотра

2 ответа

25674 Репутация автора

Я пытаюсь скомпилировать некоторый код c2 i2cdevlib с помощью gcc, и я получаю сообщение об ошибке:

/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 или пространства имен, и не должен ли сам определять эту функцию?

Автор: Cerin Источник Размещён: 19.07.2016 04:06

Ответы (2)


6 плюса

9749 Репутация автора

Решение

Параметры, которые вы передаете, 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);
Автор: for_stack Размещён: 19.07.2016 04:24

1 плюс

47268 Репутация автора

Ваше сообщение об ошибке говорит само за себя

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)
Автор: Abhijit Размещён: 19.07.2016 04:30
Вопросы из категории :
32x32