2016-05-14 67 views
5
typedef struct item { 
    char *text; 
    int count; 
    struct item *next; 
}; 

Quindi ho questa struttura con nodi definita come sopra, ma Sto ottenendo l'errore di seguito e Im non in grado di capire cosa c'è di sbagliato."avviso: identificatore di classe di memoria inutile nella dichiarazione vuota" nella struttura

avviso: identificatore di classe di memoria inutile nella dichiarazione vuota };

+3

Hai dimenticato di dargli un nome: 'typedef struct item { char * text; conteggio int; oggetto struct * next; } tralalala; ' – wildplasser

+0

Pensavo che l'uso di typedef nelle strutture che funzionano con i puntatori non fosse consigliabile? Dovrei usare typedef anche se non lo userò? – spacing

+2

In genere, non è necessario digitare typedef. Puntatori nascosti dietro un typedef sono più confusi. – wildplasser

risposta

7

non sono sicuro, ma provate così:

typedef struct item { 
    char *text; 
    int count; 
    struct item *next; 
}item; 
+1

Questo è corretto. –

3

Il typedef è inutile perché non ha dato un nome. Non è possibile utilizzare il typedef in alcun modo. Ecco perché ricevi un avvertimento, perché il typedef è inutile.

1

La struct è in realtà ancora utilizzabile senza avvisare se si rimuove la parola chiave typedef in questo modo:

struct item { 
    char *text; 
    int count; 
    struct item *next; 
}; 

Hai solo bisogno di includere la parola chiave 'struct' nella dichiarazione delle variabili. cioè

struct item head; 

come altri hanno fatto notare, se si include il nome alla fine della definizione struct quindi è possibile utilizzarlo come typedef e si sbarazzarsi di avvertimento, anche senza la parola chiave struct, ma questo fa la prima istanza di 'voce' superfluo cioè

typedef struct { 
    char *text; 
    int count; 
    struct item *next; 
} item; 

item head; 

sarà anche sbarazzarsi di avvertimento.