Ich versuche auf die Elementvariable x in struct Anfang zuzugreifen, indem ich ein Bottom -Objekt verwende.
Der Code ist der folgende:
%Vor%Dies gibt den folgenden Fehler mit gcc 4.8:
%Vor%Wie ist das mehrdeutig und wie kann ich mit einem qualifizierten Namen darauf zugreifen?
Das Problem ist, dass C ++ keine Möglichkeit hat, das Konzept von "mehrstufigen" Klassenmitgliedern direkt auszudrücken, wie zum Beispiel "das Mitglied x
des Top
Unterobjekts von Left
". Was Left::Top::x
bedeutet, ist "das Mitglied x
in dem mit Left::Top
bezeichneten Typ" - und der mit Left::Top
bezeichnete Typ ist genau Top
.
Aus diesem Grund können Sie seltsame Dinge wie
schreiben %Vor%, weil die rechte Seite von =
exakt &Top::x
entspricht und ein Zeiger-zu-Basis-Klassenglied implizit in ein Zeiger-zu-abgeleitet-Klassenglied umgewandelt werden kann. (Das Ergebnis dieser Konvertierung bezieht sich immer noch auf das Member im Basisklassen-Subobjekt der abgeleiteten Klasse.)
Um zu disambiguieren, können Sie entweder etwas in der Art von static_cast<Left &>(b).Top::x
tun oder einen Pointer-to-member verwenden - int Left::* ptr = &Top::x;
, b.*ptr
verweist auf x
im Unterobjekt Top
des Left
Unterobjekt von b
.
Tags und Links c++ inheritance multiple-inheritance