2016-12-01 5 views
0

Этот вопрос задан раньше, но из того, что я видел, все люди злоупотребляют 'a.b', чтобы получить значения указателя. Я использую 'a->b', но он все еще бросает эту ошибку. Вот мой код, это означает, что динамический стек:C - ошибка: запрос для члена '---' в чем-то, что не является структурой или объединением

Заголовок файла:

typedef struct etCel{ 
    element *ele; 
    struct cel *suiv; 
} cel; 

typedef cel* pile; 

pile init_pile(); 
int affiche_pile(pile *p); 

.c файл:

pile init_pile(pile *p){ 
    return NULL; 
} 
int affiche_pile(pile *p){ 
    printf("Valeurs de la pile:\n"); 
    while(p!=NULL){ 
     affiche_element(p->ele); 
     printf("\n"); 
     p=*(p->suiv); 
    } 
    return 1; 
} 
+0

У вас 'typedef' pile как указатель на cel, тогда вы передаете указатель' pile' в функцию, это указатель на указатель на cel. –

+0

[MVCE] (http://stackoverflow.com/help/mcve) please – Danh

+0

'pile' typedef'ed как тип указателя на' etCel/cel', но 'pile *' означает указатель на другой указатель (двойное косвенное). Следовательно, вы получаете ошибку. –

ответ

4
typedef cel* pile; 

и

int affiche_pile(pile *p){ 

Это приводит к тому, что p теперь является указателем на указатель. Расширьте декларации, и вы получите

cel* *p; 

Так что либо изменить функцию подпись int affiche_pile(pile p) или typedef cel pile

1

pile *p является двойным указателем, так что вы изменить свой код что-то вроде этого:

affiche_element((*p)->ele); 

Изменения в другие места тоже.