2010-10-28 6 views
20

ottengo questo errore durante la compilazione di questo file sorgente .cdimensioni di 'nomi' di stoccaggio non è noto

/INIT_SOURCE_BUILD/src/names_list.c:7: error: storage size of ‘names’ isn’t known

#include <stdio.h> 
#include "list.h" 

int main(){ 

    struct List names; 
    names->size = 3; 

    struct ListElmt michael; 
    struct ListElmt john; 
    struct ListElmt adams; 

    names->head = michael; 

    michael->data = 12; 
    michael->next = john; 
    john->data = 14; 
    john->next = adams; 
    adams->data = 16; 

    struct ListElmt pointer = List->head; 
    for(int x = 0; x < 3 ; x++){ 
     printf("Iteration.%d data: %d", x, pointer->data); 
     pointer->next = pointer->next->next; 
    } 
} 

e qui è un colpo di testa di questa lista collegata

#ifndef LIST_H 
#define LIST_H 

#include <stdio.h> 

/*          Define linked list elements*/ 

typedef struct _ListElmt{ 

void    *data; 
struct _ListElmt  *next; 

} ListElmt; 

/*          Define a structure for the list*/ 

typedef struct _List{ 

int     size; 
int     (*match)(const void *key1, const void *key2); 
void    (*destroy)(void *data); 

ListElmt    *head; 
ListElmt    *tail; 

} List; 

void list_init(List *list, void (*destroy)(void *data)); 

void list_destroy(List *list); 

int list_ins_next(List *list, ListElmt *element, const void *data); 

int list_rem_next(List *list, ListElmt *element, void **data); 

int list_size(const List *list); 

ListElmt *list_head(const List *list); 

ListElmt *list_tail(const List *list); 

int list_is_head(const ListElmt *element); 

int list_is_tail(const ListElmt *element); 

void *list_data(const ListElmt *element); 

ListElmt *list_next(const ListElmt *element); 
#endif 

risposta

36

Quando si typedef un struct del genere, non è necessario utilizzare struct quando si dichiara che:

List names; 

invece di

struct List names; 

Non è anche un puntatore, quindi names->size dovrebbe essere names.size.

+4

+1 Solo un commento per rendere più chiaro: la 'struct List' non esiste. C'è un 'struct _List' e un typedef' List' che identifica lo stesso tipo di 'struct _List'. * (Odio typedef!) * – pmg

+0

ho un altro errore names_list.c: 14: errore: argomento di tipo non valido di '->' (avere 'Elenco') –

+0

@Sam: i puntatori accettano la scorciatoia '->' per accedere ai membri le semplici struct li accedono con '.'. – pmg

3

struct List names; non dichiara un puntatore, ma stai cercando di dereferenziarlo (usando ->). Utilizzare invece names.size.

3

La struttura è denominata _List. Il typedef è List. Così si vuole

List names; 

o

struct _List names; /* probably not, the _ is convention for internal names */ 

La linea sta dichiarando una "Lista struct", che non è ancora definita.

Le altre risposte sono abbastanza corrette su. vs -> problema

Problemi correlati