Forum: Compiler & IDEs struct mit klassen objekten


von Kaj (Gast)


Lesenswert?

Hallo Leute,

ist es moeglich in einem struct objekte von klassen "zusammen zufassen"?
In etwa so:
1
typedef struct
2
{
3
  Class_A Obj_A;
4
  Class_B Obj_B_One(3);
5
  Class_B Obj_B_Two(95);
6
}OBJECTS;
7
8
OBJECTS MyObjects;

gcc 4.7.2

Gruesse

von Yalu X. (yalu) (Moderator)


Lesenswert?

Natürlich geht das, warum nicht?

Edit: Was nicht geht, ist die Argumentübergabe an die jeweiligen
Konstruktoren. Dazu musst du für OBJECTS einen Konstruktoren schreiben,
der die Unterobjekte initialisiert.

Übrigens: Statt
1
typedef struct
2
{
3
  ...
4
}OBJECTS;

kannst du in C++ auch einfach
1
struct OBJECTS
2
{
3
  ...
4
};

schreiben.

: Bearbeitet durch Moderator
von Kaj (Gast)


Lesenswert?

Yalu X. schrieb:
> Edit: Was nicht geht, ist die Argumentübergabe an die jeweiligen
> Konstruktoren. Dazu musst du für OBJECTS einen Konstruktoren schreiben,
> der die Unterobjekte initialisiert.

Das war es, was mir gefehlt hat. Vielen Dank! :)

von Peter II (Gast)


Lesenswert?

Yalu X. schrieb:
> Edit: Was nicht geht, ist die Argumentübergabe an die jeweiligen
> Konstruktoren. Dazu musst du für OBJECTS einen Konstruktoren schreiben,
> der die Unterobjekte initialisiert.

warum sollte das nicht gehen? Struct ist auch nur eine class wo alles 
public ist.
1
struct x
2
{
3
   m_y1 String,
4
   m_y2 String
5
   x( const char* y1, const char* y2 )
6
   : m_y1( y1 ),
7
     m_y2( y2 ) 
8
   {}
9
}

von Kaj (Gast)


Lesenswert?

Yalu X. schrieb:
> Natürlich geht das, warum nicht?

Peter II schrieb:
> warum sollte das nicht gehen?

Das mit dem Konstruktor wusste ich nicht, und da gab es dann bei der 
Benutzung Errormeldungen ala "xyz ist kein Member der Klasse A...".
Durch den Hinweis mit dem Konstruktor im struct hat sich das jetzt aber 
erledigt. :) Danke euch!

von Dr. Sommer (Gast)


Lesenswert?

Peter II schrieb:
> Yalu X. schrieb:
>> Edit: Was nicht geht, ist die Argumentübergabe an die jeweiligen
>> Konstruktoren. Dazu musst du für OBJECTS einen Konstruktoren schreiben,
>> der die Unterobjekte initialisiert.
>
> warum sollte das nicht gehen? Struct ist auch nur eine class wo alles
> public ist.
Weil der C++ Standard die Initialisierung von nicht-constexpr-Membern im 
Class-Body verbietet. Das muss in den Konstruktor - und zwar genau so 
wie du geschrieben hast (ja, das ist ein Konstruktor)...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.