class Outer {
class Inner {
public:
Inner() {}
void func() ;
};
private:
static const char* const MYCONST;
int var;
};
void Outer::Inner::func() {
var = 1;
}
const char* const Outer::MYCONST = "myconst";
Dieser Fehler tritt auf, wenn ich mit der Klasse Outer :: Inner kompiliere. Es gibt kein Mitglied mit dem Namen "var".
c++
inner-classes
kal
quelle
quelle
Eine innere Klasse hat Zugriff auf alle Mitglieder der äußeren Klasse, hat jedoch keinen impliziten Verweis auf eine übergeordnete Klasseninstanz (im Gegensatz zu einer gewissen Verrücktheit mit Java). Wenn Sie also einen Verweis auf die äußere Klasse an die innere Klasse übergeben, kann er auf alles in der Instanz der äußeren Klasse verweisen.
quelle
Alles, was Teil von Outer ist, sollte Zugang zu allen öffentlichen oder privaten Mitgliedern von Outer haben.
Bearbeiten: Ihr Compiler ist korrekt, var ist kein Mitglied von Inner. Wenn Sie jedoch einen Verweis oder Zeiger auf eine Instanz von Outer haben, kann dieser darauf zugreifen.
quelle
var ist kein Mitglied der inneren Klasse.
Für den Zugriff auf var sollte ein Zeiger oder eine Referenz auf eine Instanz der äußeren Klasse verwendet werden. zB pOuter-> var funktioniert, wenn die innere Klasse ein Freund der äußeren ist, oder var ist öffentlich, wenn man den C ++ - Standard streng befolgt.
Einige Compiler behandeln innere Klassen als Freund der äußeren, andere möglicherweise nicht. In diesem Dokument finden Sie Informationen zum IBM Compiler :
"Eine verschachtelte Klasse wird im Bereich einer anderen Klasse deklariert. Der Name einer verschachtelten Klasse ist lokal für die einschließende Klasse. Sofern Sie keine expliziten Zeiger, Verweise oder Objektnamen verwenden, können Deklarationen in einer verschachtelten Klasse nur sichtbare Konstrukte verwenden, einschließlich Geben Sie Namen, statische Elemente und Enumeratoren aus der einschließenden Klasse und den globalen Variablen ein.
Mitgliedsfunktionen einer verschachtelten Klasse folgen regulären Zugriffsregeln und haben keine besonderen Zugriffsrechte für Mitglieder ihrer umschließenden Klassen. Mitgliedsfunktionen der einschließenden Klasse haben keinen besonderen Zugriff auf Mitglieder einer verschachtelten Klasse. "
quelle
friend
oder explizit zu deklarierenpublic
. Wen kümmert es, wenn IBM in der Vergangenheit an einem toten Link falsch / veraltet war? Diese Antwort war bereits 3 Jahre vor ihrer Veröffentlichung veraltet.Zunächst versuchen Sie, auf nicht statische Elemente
var
außerhalb der Klasse zuzugreifen, die in C ++ nicht zulässig sind.Marks Antwort ist richtig.
Sie können also zwei Dinge tun, entweder
var
als deklarierenstatic
oder eine Referenz einer Instanz der äußeren Klasse verwenden, um auf 'var' zuzugreifen (weil es sich um eine Friend-Klasse oder -Funktion handelt auch eine Referenz benötigt, um auf private Daten zuzugreifen).Statische Var
Wechseln
var
zustatic
Wenn Sie nichtvar
mit den Instanzen der Klasse verknüpft werden möchten .Ausgangsvariable: 1
Nicht statische var
Die Referenz eines Objekts muss auf nicht statische Elementvariablen zugreifen.
Ausgangsvariable: 1
Bearbeiten - Externe Links sind Links zu meinem Blog.
quelle