我正在編寫一個模板音頻類(與typename T
)音頻操作與二進制數據是int16_t
或int8_t
。 Lambda函數對我來說是非常新的,所以我不知道這個函數用於計算均方根(RMS)有什麼問題。下面是代碼:C++ Lambda函數轉換錯誤
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());
};
}
被拋出的錯誤是:
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是一個短整型此功能。
感謝
您返回的是lambda而不是調用lambda的結果。你需要附加'()'。 –
這個lambda的目的是什麼?你的意思是將它返回到呼叫站點,還是你想調用它?如果你想調用它並返回一個值,那麼這裏就不需要lambda了。只需將其刪除,該功能將「正常工作」。 – NathanOliver
在你的代碼中,你正在編寫一個返回T值的函數,但是使用一個lambda來計算它。爲什麼?爲什麼需要使用lambda?你可以編寫一個標準的模板函數來使用它來完成工作。 – bracco23