Struktur in Klasse
-
Hi,
ich hab folgendes Problem: Ich hab eine Klasse, die eine Struktur enthält:class A { private: struct B { element 1 ... }; public: methode() {..} };Wie kann ich nun - per Konstruktor der Klasse A - die Elemente von struct B mit Werten initialisieren? Geht das nur, indem ich im Konstruktor eine Instanz von B erstelle? Also
A() { B foo; foo.element1 = bar; }und wie könnte ich das über die Konstruktorliste realisieren?
2. Problem:
Ich möchte gerne über die Methode der Klasse A auf die Elemente der Struktur zugreifen. Also ungefähr so:methode() { this->(struct b).element1; }Das Problem hieran ist, dass ich nicht weiß, wie an die Elemente komme bzw. was ich anstelle (struct b) dort hinschreiben soll. Muss ich in der Methode selbst dann nochmal eine Instanz der Struktur B erstellen, um darüber dann Zugriff auf die Elemente zu erhalten? Das möchte ich möglichst umgehen, da oben im Konstruktor ja (evt.) schon eine Instanz von B erstellt wurde. Gibt es da noch eine andere Möglichkeit?
-
Du mußt dann auch (mindestens) eine Instanz der Struktur innerhalb deiner Klasse erzeugen:
class A { private: struct B { int element1; ... }; B b; // Instanz von B public: methode() { b.element1 = 42; // Zuweisung } };Struktur und Klassen sind in C++ fast identisch, bis auf die Standardsichtbarkeit (public <-> private),
d.h. du kannst auch bei der Struktur einen Konstruktor implementieren.P.S. die Variable 'foo' in deinem Konstruktor ist völlig sinnlos, da sie lokal ist und am Ende der Funktion wieder automatisch gelöscht wird.
Mir scheint, du kommst noch nicht ganz mit dem Erstellen von Klassen (und Strukturen) klar - ich hoffe, du hast ein gutes Buch/Tutorial zur Hand, sonst wirst die Zusammenhänge kaum verstehen (lernen).
-
Alles klar, vielen Dank für die schnelle Auskunft

-
class foo { struct bar { std::size_t data; bar(std::size_t const& data) : data(data) {} } m_inst; public: foo() : m_inst(42) {} operator bar const&() { return m_inst; } };... jetzt solltest du auch dein foo in bar casten können und dessen Funktionen aufrufen
