2012-07-19 10 views
6
struct mystruct 
{ 
    int i; 
    double f; 
} ; 

typedef mystruct myotherstruct; 

//the other .cpp file 
struct mystruct; //OK,this is a correct forward declaration. 
struct myotherstruct; // error C2371(in vc2k8): 'myotherstruct' : redefinition; different basic types 

Hallo alle. Warum kann ich MyStyle nicht weiterleiten?deklarieren typedef typ

+1

http://stackoverflow.com/questions/804894/forward-declaration-of-a-typedef-in-c – Jeeva

Antwort

1

Die myotherstruct Kennung kein struct Tag ist, ist es ein Typname ist in seinen eigenen Rechten. Sie verwenden es ohne das Schlüsselwort struct. Einmal definiert, kann der Name nicht für ein struct-Tag wiederverwendet werden. In Ihrem Beispiel geben Sie den Typ myotherstruct nicht weiter und deklarieren einen struct mit dem Tag myotherstruct, was zu einem Fehler führt, da der Name myotherstruct für den typedef bereits vergeben wurde.

+0

Ist ein struct-Tag äquivalent zu einem Namen des Typs? mystruct m; –

+0

@LeonhartSquall Seltsamerweise hängt die Antwort auf diese Frage davon ab, ob dies C++ oder C ist: In C++ kann das Struktur-Tag als ein Name ohne 'typedef' verwendet werden, während in C zuerst 'typedef' eingegeben werden muss. – dasblinkenlight

+0

Ist ein struct-Tag äquivalent zu einem Namen vom Typ? , wenn ich mystruct verwende, um ein Objekt zu definieren: mystruct m; Ich denke immer, dass mystruct ein Typname ist. Und ich weiß nie, dass es ein Struktur-Tag ist. Wie kann ich das Struktur-Tag unterschreiben? –

1

Sie können die Deklaration typedefs ohne Forward-Deklaration der struct, die typedefed ist, nicht weiterleiten. Sie sollten zunächst erklären, nach vorn die struct und dann typedef

struct mystruct; 
typedef mystruct myotherstruct; 
Verwandte Themen