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

Hola a todos. ¿Por qué no puedo reenviar declarar myotherstruct?declarar typedef tipo

+1

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

Respuesta

1

El myotherstruct identificador no es una etiqueta struct, es un nombre de tipo en sus propios derechos. Lo usa sin la palabra clave struct. Una vez definido, el nombre no puede reutilizarse para una etiqueta struct. En su ejemplo, no está anunciando el tipo myotherstruct, está declarando un struct con la etiqueta myotherstruct, que le da un error porque el nombre myotherstruct ya se ha tomado para el typedef.

+0

¿Es una etiqueta struct equivalente a un nombre de tipo? mystruct m; –

+0

@LeonhartSquall Curiosamente, la respuesta a esta pregunta depende de si esto es C++ o C: en C++, la etiqueta de la estructura puede usarse como un nombre sin 'typedef', mientras que en C debes' typedef' primero. – dasblinkenlight

+0

¿Es una etiqueta struct equivalente a un nombre de tipo? cuando uso mystruct para definir un objeto: mystruct m; Siempre pienso que mystruct es un nombre de tipo. Y nunca sé si es una etiqueta struct. ¿Cómo puedo entender la etiqueta struct? –

1

No se puede relanzar declarar typedefs sin la declaración directa del struct que es typedefed. Primero debe declarar delante del struct y luego typedef

struct mystruct; 
typedef mystruct myotherstruct;