Standardzuweisungsoperator in der inneren Klasse mit Referenzmembern

7

Ich bin auf ein Problem gestoßen, das ich nicht verstehe, und ich hatte gehofft, dass jemand hier Einblick geben könnte. Der vereinfachte Code lautet wie folgt (ursprünglicher Code war eine benutzerdefinierte Warteschlangen- / Warteschlangen-Iterator-Implementierung):

%Vor%

Beim Kompilieren gibt mir das den folgenden Fehler:

%Vor%

Ich kann das umgehen, indem ich zwei separate C-Variablen verwende, da sie unabhängige "C" -Objekte sein sollen, aber dies versteckt nur das Problem (ich verstehe immer noch nicht, warum ich das nicht tun kann).

Ich denke der Grund ist, dass die Referenz nicht kopiert werden kann, aber ich verstehe nicht warum. Muss ich meinen eigenen Zuweisungsoperator und Kopierkonstruktor bereitstellen?

    
laura 02.12.2009, 12:48
quelle

4 Antworten

13

Dieses Problem hat nichts mit inneren Klassen zu tun. In C ++ können Sie Referenzen einfach nicht (wieder) zuweisen - sie müssen initialisiert werden, wenn sie definiert sind.

Ein einfacheres Beispiel ist:

%Vor%     
Seb Rose 02.12.2009, 13:04
quelle
6

Eine Referenz kann nicht geändert werden, nachdem sie ihren Anfangswert erhalten hat. Dies bedeutet, dass es unmöglich ist, einen Zuweisungsoperator zu schreiben, der den Wert eines Referenzelements ändert. Wenn Sie dies tun müssen, verwenden Sie einen Zeiger anstelle einer Referenz.

    
interjay 02.12.2009 13:01
quelle
3

Tatsächlich gibt es dafür eine Lösung. Sie können operator = in Bezug auf den Kopieraufbau implementieren , und es wird funktionieren :) Es ist eine sehr fähige Technik für solche Fälle. Angenommen, Sie möchten die Zuweisung unterstützen.

    
rmn 02.12.2009 20:54
quelle
0

C ++ hat keine "inneren Klassen", nur verschachtelte Klassendeklarationen. "innere Klassen" sind ein Java-ism, von dem ich nicht glaube, dass er in anderen Mainstream-Sprachen zu finden ist. In Java sind innere Klassen besonders, da sie einen impliziten unveränderlichen Verweis auf ein Objekt des enthaltenden Typs enthalten. Um das Äquivalent zu den verschachtelten C ++ - Deklarationen in Java zu erreichen, müssen statische innere Klassen verwendet werden. Statische innere Klassen enthalten keinen Verweis auf ein Objekt des deklarierenden Typs.

    
DrPizza 02.12.2009 18:36
quelle