2012-07-19 11 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 

Witam wszystkich. Dlaczego nie mogę przekazać dalej deklaracji myotherstruct?zadeklaruj typedef typ

+1

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

Odpowiedz

1

myotherstruct identyfikator nie jest struct tag, jest to nazwa typ w swoich własnych prawach. Używasz go bez słowa kluczowego struct. Po zdefiniowaniu nazwa nie może być ponownie użyta dla znacznika struct. W twoim przykładzie nie zadeklarowałeś do przodu typu myotherstruct, deklarujesz forwardowanie struct z tagiem myotherstruct, co daje błąd, ponieważ nazwa myotherstruct została już podjęta dla .

+0

Czy tag struct jest równoważny nazwie typu? mystruct m; –

+0

@LeonhartSquall Co ciekawe, odpowiedź na to pytanie zależy od tego, czy jest to C++ czy C: w C++, tag struktury może być użyty jako nazwa bez 'typedef', podczas gdy w C musisz' typedef' najpierw. – dasblinkenlight

+0

Czy tag struct jest odpowiednikiem nazwy typu? kiedy używam mystruct do zdefiniowania obiektu: mystruct m; Zawsze uważam, że mystruct to nazwa typu. I nigdy nie wiem, że jest to tag struct.How można undersand tagu struct. –

1

Nie można przesłać dalej deklaracji typedefs bez deklaracji przekazania od struct, która jest typedefed. Należy najpierw do przodu zadeklarować struct a następnie typedef

struct mystruct; 
typedef mystruct myotherstruct;