내가 노력하고 가능한 한 다음 코드를 증류 한이 잘 컴파일C 구조체의 형식 정의와 선언의 원인이 포인터 오류
#include <stdlib.h>
typedef struct item{
struct item *next;
}item;
void addItem(item *list)
{
item *newItem = list;
while(newItem->next != NULL){
newItem = newItem->next;
}
newItem->next = malloc(sizeof(item));
newItem->next->next = NULL;
}
int main()
{
item *groceryList = NULL;
groceryList = malloc(sizeof(item));
if(groceryList == NULL)
return 1;
groceryList->next = NULL;
addItem(groceryList);
return 0;
}
.
이structpointertest.c:11:11: warning: assignment from incompatible pointer type structpointertest.c:15:15: error: request for member 'next' in something not a structure or union
나는이 문제를 일으키는 구조체 선언을 이해하지 않습니다하지만에 구조체 선언 (또는 변경의 조합) 변경 : 컴파일 할 때
typedef struct{ /*Removed "item"*/
item *next; /*Removed "struct"*/
}item;
하면 다음과 같은 오류가 발생합니다 ? 중첩 된 구조체를 사용하고 있다는 사실과 관련이 있습니까?
감사합니다.
컴파일러는'item'이 선언 행'item * next'에 있는지 알지 못합니다. –
"중첩 구조"가 없습니다. 그리고 끝없는 재귀가있을 수 없습니다. – Olaf
죄송합니다. 나는 그것을 심각하게 말했습니다. 나는 구조의 중첩을 의미하는 것이 아니라 별칭의 중첩을 의미했습니다. –