2010-10-28 15 views
20

मैं इस ग स्रोत फ़ाइलभंडारण आकार ज्ञात नहीं है

/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; 
    } 
} 

और यहाँ इस लिंक्ड सूची

#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 

उत्तर

36

आप typedef एक struct कि तरह, आप जब यह घोषित करने struct उपयोग करने के लिए की जरूरत नहीं है जब:

struct List names; 

की

List names; 

बजाय यह भी एक सूचक नहीं है, तो names->size होना चाहिए names.size

+4

+1 बस इसे स्पष्ट करने के लिए एक टिप्पणी: 'संरचना सूची' मौजूद नहीं है। एक 'struct _List' और एक टाइपिफ़' सूची' है जो उसी प्रकार की पहचान 'struct _List' के रूप में करती है। * (मुझे टाइपपीफ से नफरत है!) * – pmg

+0

मेरे पास एक और त्रुटि है नाम_सूची.c: 14: त्रुटि: '->' ('सूची' है) के अमान्य प्रकार तर्क –

+0

@ सैम: पॉइंटर्स सदस्यों तक पहुंचने के लिए '-> शॉर्टकट लेते हैं , सादे structs उन्हें '.' के साथ उपयोग करते हैं। – pmg

3

struct List names; के शीर्षक है संयोजित करते समय यह त्रुटि प्राप्त एक सूचक घोषित नहीं करता है, लेकिन आप इसे कम करने की कोशिश कर रहे हैं (-> का उपयोग कर)। इसके बजाय names.size का उपयोग करें।

3

संरचना को _List कहा जाता है। टाइपपीफ सूची है। तो तुम

List names; 

या

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

आपका लाइन एक "struct सूची" जो अभी तक परिभाषित नहीं है की घोषणा कर रहा है चाहता हूँ।

अन्य उत्तरों के बारे में काफी सही हैं। बनाम -> अंक

संबंधित मुद्दे