(구조체 포인터)가 가리키는 (구조체 내의 포인터 변수)에 (구조체 포인터)를 넣고자 할 때 워닝 처리
다름이 아니라, 이런 상황에 처해 있어서 짐작가는 이유 있으면 도움 좀 주시면 감사하겠습니다.
글로벌 위치에 타잎데프를 이용해 이름을 Node로 지어준 스트럭트를 선언했으며,
typedef struct {
int val;
struct Node* next;
} Node;
어떤 글로벌 함수(링크드 리스트 처리하는 함수) 에서 이런 부분이 있습니다.
이 함수에 인자로 전달받은 구조체 Node형 포인터 p에 대해서
함수(){
Node* left_tmp=(Node*)malloc(sizeof(Node));
p->next=left_tmp;
}
이것이
warning: assignment from incompatible pointer type 를 불러 옵니다.
이를 다름과 같이 변형해도 같은 워닝이 뜹니다.
함수(){
Node* left_tmp=(Node*)malloc(sizeof(Node));p->next= (Node*) left_tmp;}
왜 이럴까요..... 에러가 아니니 그냥 넘길까 싶기도 한데, 영 좀 그렇네요
p->next는 역시 Node* 형 타잎을 가진 변수인데, 왜 타잎체크에서 경고가 자꾸 나온는지, 모르겠습니다.
Node의 정의도 올려.
올렸습니다
typedef struct를 typedef struct Node로 고치렴.
struct Node라는 건 존재하지 않는 타입이야. 재미있는 건 struct aaa * 이렇게 존재하지 않는 구조체 타입의 포인터 변수를 C에서는 허용한다는 거야.
그래서 구조체 정의할 때 에러가 안 났던 거고. 하지만 컴파일러는 Node와 struct Node를 다른 타입으로 보고 있으니깐 저런 에러가 나는 거.
이런 젠장. 감사합니다. typedef struct Node{} Node; 로 고치니 워닝이 사라졌습니다. 이렇게 구조체 이름을 지정할 때, 지정된 것으로 지정해도 된느줄은 처음 알았네요
http://dblack.tk
커뮤니티 사이트 입니다 많은 이용 부탁 드립니다.