Ich schreibe eine Audio-Klasse mit Audio-Bearbeitung (mit typename T
) mit binären Daten, die entweder int16_t
oder int8_t
ist. Lambda-Funktionen sind für mich sehr neu, daher weiß ich nicht, was mit dieser Funktion falsch ist, die zur Berechnung des quadratischen Mittelwerts (RMS) verwendet wird. Hier ist der Code:C++ Lambda-Funktion Konvertierungsfehler
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());
};
}
Der Fehler ausgelöst wird, ist:
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
Ich testete diese Funktion verwenden int8_t
so denke ich, das ist, warum es heißt T ein short int ist.
Dank
Sie geben das Lambda und nicht das Ergebnis des Aufrufs des Lambda zurück. Sie müssen '()' anhängen. –
Was ist der Zweck dieses Lambda? Soll das an die Aufrufseite zurückgegeben werden oder möchten Sie sie aufrufen? Wenn Sie es aufrufen und einen Wert zurückgeben wollen, brauchen Sie hier kein Lambda. Einfach entfernen und die Funktion wird "einfach funktionieren". – NathanOliver
In Ihrem Code schreiben Sie eine Funktion, die einen T-Wert zurückgibt, aber ein Lambda verwendet, das sie berechnet. Warum? Warum die Notwendigkeit, Lambda zu verwenden? Sie können einfach eine Standard-Template-Funktion schreiben, die Sie verwenden, um die Arbeit zu erledigen. – bracco23