2012-04-20 15 views
7

Eventuali duplicati:
Forward declarations of unnamed structavanti dichiarando un typedef di una struct senza nome

Se ho

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

posso inoltrare dichiararla in quel modo

struct tagPAGERANGE; 
typedef struct tagPAGERANGE PAGERANGE; 

Ma quello che ho è

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

io non sono sicuro di come posso farlo. Voglio solo tenere un puntatore a questa struttura. In questo momento sono bloccato o includendo un'intestazione piuttosto sostanziale, o duplicando la definizione della struttura.

+2

Non sembra molto simile al C++. Perché l'hai taggato con il tag "C++"? – Griwes

+2

Cosa c'è di sbagliato nel nominare la struct? – mydogisbox

+1

C e C++ sono lingue diverse. Di quale lingua stai chiedendo? –

risposta

12

È impossibile. Puoi solo dichiarare le strutture con nome.

Pensa a cosa identifica una struttura che non ha un nome e come dici al compilatore che è quella struttura che desideri. Se non ha un nome, è identificato dai suoi membri, quindi è necessario fornire i membri, ovvero definirlo. Pertanto, non è possibile dichiarare - non si dispone di un codice identificativo oltre alla definizione stessa.

+0

c'è una soluzione alternativa: http://stackoverflow.com/a/7304634/347508 – kritzikratzi

2

Dal momento che questo è utilizzato in un codice C++, basta eliminare completamente i typedef, sono inutili e di cattivo stile in C++.

La vera soluzione è quella di utilizzare solo le strutture denominate:

struct foo; // forward declaration 

struct foo { 
    // … implementation 
}; 

Le typedef non sono utili.

+3

Il file di intestazione che utilizza quei typedefs non è mio ed è progettato per funzionare sia in C che in C++. – sashoalm

+0

@satuon In tal caso, vedi la domanda duplicata. Come ha detto il gatto, questo è semplicemente impossibile, ma l'altra domanda mostra una soluzione (orribile). –

Problemi correlati