2016-07-19 8 views
1

私はgccで、いくつかのC++ i2cdevlib codeをコンパイルしようとしていると私は、エラーを受信して​​います:「分(uint8_t&、int型)」への呼び出しに該当する機能

/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またはnamespace宣言がどこかにないと仮定して正しいですが、この関数を自分で定義するべきではありませんか?

答えて

5

std::minに渡すパラメータは異なります.1つはuint8_t、もう1つはintです。

次のようにstd::minの関数型は次のとおりです。

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

あなたはstd::minの型パラメータ何をコンパイラに伝える必要があります。

だから解決策は次のとおりです。

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

あなたのエラーメッセージがすべて

error: no matching function for call to 'min(uint8_t&, int)'コンパイラは、パラメータの型が適合していないと、正しい専門に解決するために失敗した

(それを言います一致)。

  1. 静的アップキャストintuint8_tパラメータfifoCountstd::min(static_cast<int>(fifoCount), 128)
  2. のようにか、明示的にstd::min<int>(fifoCount, 128)
時に特化するタイプを指定します
関連する問題