warum geht das (nicht)?
-
#include "stdafx.h" #include <iostream> class A { public: int x; class B { public: B(); int y; }; void modifyB (); }; A::B::B() //Konstruktor { y=0; }; void A::modifyB () { A::B::y=10; // <== XXX } int main(int argc, char* argv[]) { A einA; einA.modifyB(); return 0; }
Das läßt sich fehlerfrei kompilieren.
Aber beim ausführen wird der Wert 10 der 1. Vaiablen von A zugewiesen (hier x), vermutlich rein zufällig, wenn da was anderes stünde, würde das überschrieben.an der Stelle XXX verstehe ich das nicht:
1. wenn man das nicht darf, warum meckert der Compiler nicht?
2. wenn man das darf, warum gibt es ein falsches Ergebnis?
-
y solltest du mal static machen
-
@MaSTah
hmmm...eigentlich ist das keine Antwort auf meine Fragen...Und wenn ich y statisch machen, würde außerdem die Funktionalität grundlegend verändert, da jede Instanz auf das gleiche y zugreifen würde.
-
Das geht nicht.
Und wenn dein Compiler (ich tippe mal auf MSVC wegen der stdafx.h) das compiliert, dann ist das ein Fehler seinerseits.sieh auch Klasse in Klasse
-
Original erstellt von <keinPlan>:
**@MaSTah
hmmm...eigentlich ist das keine Antwort auf meine Fragen...Und wenn ich y statisch machen, würde außerdem die Funktionalität grundlegend verändert, da jede Instanz auf das gleiche y zugreifen würde.**
Dass du keine Instanzen erstellt weißt du aber, oder???
-
nö, weiß ich nicht...
int main(int argc, char* argv[]) { A einA; // <== was tue ich denn hier??? eine Instanz auf dem Stack erstellen, oder ?!? einA.modifyB(); return 0; }
Der C++ Builder kompiliert das übrigens erst gar nicht. Also ist das Ganze wohl ein Bug in MSVC 6.0 !
-
MaSTaH meint wohl, du erstellst keine Instanz von B.
Ist hinter dem Link den ich gepostet hab auch erklärt.
-
*räusper* 5 Zeilen weiter unten: Inklassen Problem