2012-04-20 13 views
7

Duplicar posibles:
Forward declarations of unnamed structdeclarar delante un typedef de una estructura sin nombre

Si tengo

typedef struct tagPAGERANGE 
{ 
    int iFirstPage; 
    int iLastPage; 
} PAGERANGE; 

puedo reenviar declarar esa manera

struct tagPAGERANGE; 
typedef struct tagPAGERANGE PAGERANGE; 

Pero lo que tengo es

typedef struct 
{ 
    int iFirstPage; 
    int iLastPage; 
} PAGERANGE; 

No estoy seguro de cómo puedo hacerlo. Solo quiero mantener un puntero a esta estructura. En este momento estoy atascado con incluir un encabezado bastante sustancial o duplicar la definición de la estructura.

+2

No se parece mucho a C++. ¿Por qué lo etiquetó con la etiqueta "C++"? – Griwes

+2

¿Qué hay de malo en nombrar la estructura? – mydogisbox

+1

C y C++ son idiomas diferentes. ¿Qué idioma estás preguntando? –

Respuesta

12

Es imposible. Solo puedes declarar estructuras nombradas.

Piensa en qué identifica una estructura que no tiene un nombre, y cómo le dices al compilador que es esa estructura que deseas. Si no tiene un nombre, sus miembros lo identifican, por lo que debe proporcionar miembros, es decir, definirlo. Por lo tanto, no puede solo declararlo: no tiene un lujo de un identificador que no sea la definición en sí.

+0

hay una solución alternativa: http://stackoverflow.com/a/7304634/347508 – kritzikratzi

2

Dado que esto se usa en un código C++, simplemente deshazte del typedefs por completo, son estilo innecesario y malo en C++.

La verdadera solución es usar estructuras nombradas:

struct foo; // forward declaration 

struct foo { 
    // … implementation 
}; 

Los typedefs no son útiles.

+3

El archivo de encabezado que utiliza esos typedefs no es mío, y está diseñado para funcionar tanto en C como en C++. – sashoalm

+0

@satuon En ese caso, vea la pregunta duplicada. Como dijo el gato, esto simplemente no es posible, pero la otra pregunta muestra una (espantosa) solución. –

Cuestiones relacionadas