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?
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.
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.
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.
Tags und Links c++ reference assignment-operator