Beim Erstellen von Objekten mit privaten Mitgliedern, die nicht konstante L-Wert-Referenzen erfordern Konstruktoren, wie im Fall von Foo, kann es schwierig sein, geeignete Werte zu übergeben. Das Ändern der Foo-Klasse ist nicht immer möglich und die Verwendung von Rohzeigern ist unerwünscht.
In dieser Situation entsteht der Fehler durch den Versuch, eine L-Wert-Referenz vom Typ „int&“ an einen R-Wert vom Typ „int“ zu binden Initialisieren des privaten Mitglieds „f“ der Bar-Klasse. Der Foo-Konstruktor erwartet eine benannte Variable und keinen temporären Wert, wie in diesem Fall, wo „genValue()“ eine Ganzzahl zurückgibt.
Um das Problem zu beheben, sollten Sie erwägen, das Argument stattdessen als Wert an den Foo-Konstruktor zu übergeben der Referenz. Dadurch wird eine Kopie der von „genValue()“ zurückgegebenen Ganzzahl erstellt und dem „x“-Mitglied des Foo-Objekts zugewiesen.
Hier ist der korrigierte Code:
<code class="cpp">class Foo { public: Foo(int x) { // Pass by value this->x = x; } private: int x; }; class Bar { public: Bar(): f(genValue()) { // Pass by value } private: Foo f; int genValue() { int x; // do something ... x = 1; return x; } };</code>
Durch Übergabe des genValue()-Rückgabewerts als tatsächliches Argument weist der Compiler den Wert der temporären Variablen dem x-Mitglied des Foo-Objekts zu. Dieser Ansatz vermeidet den Fehler und behält gleichzeitig das beabsichtigte Verhalten bei.
Das obige ist der detaillierte Inhalt vonWie behebe ich Bindungsfehler beim Initialisieren privater Mitglieder mit nicht konstanten L-Wert-Referenzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!