int16_t
またはint8_t
のいずれかのバイナリデータでオーディオ操作用のテンプレート付きオーディオクラス(typename T
)を作成しています。ラムダ関数は私にとって非常に新しいものなので、二乗平均平方根(RMS)の計算に使用されるこの関数の何が間違っているのか分かりません。私はそれはTがshort int型であると言う理由があると思いC++ラムダ関数変換エラー
audio.h: In instantiation of ‘T YNGMAT005::Audio<T>::calculate_RMS() [with T
= short int]’:
audiodriver.cpp:119:66: required from here
audio.h:178:5: error: cannot convert ‘YNGMAT005::Audio<T>::calculate_RMS()
[with T = short int]::__lambda0’ to ‘short int’ in return
};
^
audio.h: In instantiation of ‘T YNGMAT005::Audio<T>::calculate_RMS() [with T = signed char]’:
audiodriver.cpp:122:65: required from here
audio.h:178:5: error: cannot convert ‘YNGMAT005::Audio<T>::calculate_RMS()
[with T = signed char]::__lambda0’ to ‘signed char’ in return
make: *** [audiodriver.o] Error 1
私はint8_t
を使用してこの機能をテストしていた。
T calculate_RMS() {
return [&]() {
std::vector<T> squares;
for(int i = 0; i < this->data_vector.size(); ++i) {
squares.push_back(std::pow(this->data_vector[i], 2));
}
return std::sqrt(std::accumulate(squares.begin(), squares.end(), 0)/squares.size());
};
}
エラーがスローされます。ここでは、コードです。
おかげ
ラムダを呼び出した結果ではなく、ラムダが返されます。 '()'を追加する必要があります。 –
このラムダの目的は何ですか?コールサイトに戻すことを意味するのか、それとも呼び出すのですか?それを呼び出して値を返す場合は、ここにラムダは必要ありません。ただそれを削除すると、機能は "ちょうど"動作します。 – NathanOliver
あなたのコードでは、T値を返すが、それを計算するラムダを使う関数を書いています。どうして?なぜラムダを使用する必要がありますか?標準的なテンプレート関数を書くだけで作業を行うことができます。 – bracco23