Im folgenden Code, ich bin nicht in der Lage ein temporäres Objekt als Argument an die printAge
Funktion zu übergeben:Ungültige Initialisierung der nicht konstante Referenz vom Typ
struct Person {
int age;
Person(int _age): age(_age) {}
};
void printAge(Person &person) {
cout << "Age: " << person.age << endl;
}
int main() {
Person p(50);
printAge(Person(50)); // fails!
printAge(p);
return 0;
}
Der Fehler, den ich bekommen ist:
error: invalid initialization of non-const reference of type ‘Person&’ from an rvalue of type ‘Person’
Ich weiß, dass dies etwas damit zu tun hat, einen lValue an eine Funktion zu übergeben, die einen rValue erwartet ... Gibt es eine Möglichkeit, meinen lValue mit std :: move oder etwas in rValue umzuwandeln? Ich habe versucht, einen konstanten Parameter zu nehmen, aber das scheint nicht zu funktionieren.
Es ist umgekehrt. Sie übergeben einen Rvalue an eine Funktion, die einen Lvalue erwartet. Nicht-konstante lvalue-Referenzen können nicht an rvalues binden, aber Sie können stattdessen eine 'const' lvalue-Referenz verwenden. – juanchopanza
"Ich habe versucht, einen konstanten Parameter zu nehmen, aber das scheint zu funktionieren." Sie haben das Problem also gelöst, aber entschieden, die Lösung zu verwerfen, weil sie zu funktionieren scheint? – molbdnilo
Hoppla, ich habe ein * nicht * gelassen! – jeffreyveon