Seite 1 von 2
Vorwärtsdeklaration von Unions in C
Verfasst: Mi Nov 19, 2008 6:56 pm
von Kerli
Weiß jemand von euch wie ich in C eine Vorwärtsdeklaration eines Unions erstellen kann?
Ich darf für meine Aufgabe nämlich leider kein C++ verwenden

Re: Vorwärtsdeklaration von Unions in C
Verfasst: Mi Nov 19, 2008 10:04 pm
von Xin
Kerli hat geschrieben:Weiß jemand von euch wie ich in C eine Vorwärtsdeklaration eines Unions erstellen kann?
Was spricht gegen
?
Re: Vorwärtsdeklaration von Unions in C
Verfasst: Mi Nov 19, 2008 11:52 pm
von Kerli
Xin hat geschrieben:Kerli hat geschrieben:Weiß jemand von euch wie ich in C eine Vorwärtsdeklaration eines Unions erstellen kann?
Was spricht gegen
?
Der Kompiler
Code: Alles auswählen
ex2.c:100: Fehler: expected specifier-qualifier-list before »Primitive«
Die dazugehörige Zeile schaut so aus:
Primitive habe ich vorher mit
deklariert.
In C++ ist das kein Problem aber mit C und damit auch mit dem gcc geht das so nicht. Und in der Vorlesung wird nun einmal C verlangt.
Re: Vorwärtsdeklaration von Unions in C
Verfasst: Do Nov 20, 2008 12:05 am
von Xin
Kerli hat geschrieben:Xin hat geschrieben:Kerli hat geschrieben:Weiß jemand von euch wie ich in C eine Vorwärtsdeklaration eines Unions erstellen kann?
Was spricht gegen
?
Der Kompiler

Glaube ich nicht
Kerli hat geschrieben:Code: Alles auswählen
ex2.c:100: Fehler: expected specifier-qualifier-list before »Primitive«
Die dazugehörige Zeile schaut so aus:
Da würde ich als C-Compiler auch meckern.
Code: Alles auswählen
union Primitive * next_element_; // <- blöde Namensgebung
Re: Vorwärtsdeklaration von Unions in C
Verfasst: Do Nov 20, 2008 12:20 am
von Kerli
Xin hat geschrieben:Da würde ich als C-Compiler auch meckern.
Code: Alles auswählen
union Primitive * next_element_; // <- blöde Namensgebung
Ohne 'union' vorne dran. Das ist ein Member eines Union.
Jetzt funktioniert es:
Code: Alles auswählen
typedef union Primitive Primitive;
typedef struct
{
int type_;
char *id_;
Primitive *next_element_;
Point start_;
Point end_;
} Line;
// ...
union Primitive
{
struct
{
int type_;
char *id_;
Primitive *next_element_;
};
Line line_;
Rect rect_;
Circle circle_;
Text text_;
Polygon polygon_;
};
Re: Vorwärtsdeklaration von Unions in C
Verfasst: Do Nov 20, 2008 10:30 am
von Xin
Kerli hat geschrieben:Ohne 'union' vorne dran. Das ist ein Member eines Union.
??
Code: Alles auswählen
union Primitive;
typedef struct
{
int type_;
char *id_;
union Primitive *next_element_;
Point start_;
Point end_;
} Line;
// ...
union Primitive
{
struct
{
int type_;
char *id_;
union Primitive *next_element_;
};
Line line_;
Rect rect_;
Circle circle_;
Text text_;
Polygon polygon_;
};
sollte genauso gehen. Ich persönlich mag Typedef nicht.
Re: Vorwärtsdeklaration von Unions in C
Verfasst: Do Nov 20, 2008 12:29 pm
von Kerli
Xin hat geschrieben: Kerli hat geschrieben:Ohne 'union' vorne dran. Das ist ein Member eines Union.
??
Das hat sich auf
Xin hat geschrieben:union Primitive * next_element_; // <- blöde Namensgebung
bezogen.
Xin hat geschrieben:
Code: Alles auswählen
union Primitive;
typedef struct
{
int type_;
char *id_;
union Primitive *next_element_;
Point start_;
Point end_;
} Line;
// ...
union Primitive
{
struct
{
int type_;
char *id_;
union Primitive *next_element_;
};
Line line_;
Rect rect_;
Circle circle_;
Text text_;
Polygon polygon_;
};
sollte genauso gehen. Ich persönlich mag Typedef nicht.
Ich mag typedef eigentlich auch nicht, aber in C ist das so nicht möglich.
Re: Vorwärtsdeklaration von Unions in C
Verfasst: Do Nov 20, 2008 1:20 pm
von Xin
Kerli hat geschrieben:Xin hat geschrieben:sollte genauso gehen. Ich persönlich mag Typedef nicht.
Ich mag typedef eigentlich auch nicht, aber in C ist das so nicht möglich.
Du willst mir sagen, dass
Vom Compiler nicht akzeptiert wird?
Re: Vorwärtsdeklaration von Unions in C
Verfasst: Do Nov 20, 2008 1:58 pm
von Kerli
Xin hat geschrieben:Du willst mir sagen, dass
Vom Compiler nicht akzeptiert wird?
Nein ich will sagen, dass
nicht vom Compiler akzeptiert wird.
Er erlaubt anscheinend keine Member die nicht mit typedef definiert worden sind.
Re: Vorwärtsdeklaration von Unions in C
Verfasst: Do Nov 20, 2008 2:11 pm
von Xin
Kerli hat geschrieben:Er erlaubt anscheinend keine Member die nicht mit typedef definiert worden sind.
Das ist klar, weil das nicht C entspricht.
Du kannst ja auch nicht
definieren.
Dass Classes und Structs in C++ direkt als Typ definiert werden ist in C nicht so. Und Unions werden afaik nirgendwo implizit als Typ definiert.