Heim > Backend-Entwicklung > C++ > Hauptteil

Wie behebe ich Bindungsfehler beim Initialisieren privater Mitglieder mit nicht konstanten L-Wert-Referenzen?

Barbara Streisand
Freigeben: 2024-10-30 01:46:02
Original
295 Leute haben es durchsucht

 How to Resolve Binding Errors When Initializing Private Members with Non-Const Lvalue References?

Beheben von Bindungsfehlern: Konvertieren von L-Wert-Referenzen in R-Werte

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!