Im 내 파일을 컴파일 할 때 대학의 프로젝트에 문제가 생겼습니다 (api.c api.h datastruct.c datastruct.h 및 main.c). Makefile로 문제가 datastruct.c 및 datastruct에 있습니다.구조체 typedef가 "불완전한 형식으로 포인터 역 참조 해제"를 일으키는 것은 무엇이 문제입니까?
vertex new_vertex() {
/*This functions allocate memorie for the new struct vertex wich save
the value of the vertex X from the edge, caller should free this memorie*/
vertex new_vertex = NULL;
new_vertex = calloc(1, sizeof(vertex_t));
new_vertex->back = NULL;
new_vertex->forw = NULL;
new_vertex->nextvert = NULL;
return(new_vertex);
}
및 파일에 datastruct.hi은 구조 정의가 : h를 할 때이 기능을 컴파일
typedef struct vertex_t *vertex;
typedef struct edge_t *alduin;
typedef struct _edge_t{
vertex vecino; //Puntero al vertice que forma el lado
u64 capacidad; //Capacidad del lado
u64 flujo; //Flujo del lado
alduin nextald; //Puntero al siguiente lado
}edge_t;
typedef struct _vertex_t{
u64 verx; //first vertex of the edge
alduin back; //Edges stored backwawrd
alduin forw; //Edges stored forward
vertex nextvert;
}vertex_t;
내가 문제 datastruct.h가 datastruct.c에 포함되어 볼 수 없습니다를! 컴파일러의 오류는 다음과 같습니다
gcc -Wall -Werror -Wextra -std=c99 -c -o datastruct.o datastruct.c
datastruct.c: In function ‘new_vertex’:
datastruct.c:10:15: error: dereferencing pointer to incomplete type
datastruct.c:11:15: error: dereferencing pointer to incomplete type
datastruct.c:12:15: error: dereferencing pointer to incomplete type
무엇이 문제입니까? 컴파일러 출력 내용을 오류 메시지로 보여주십시오. –
스타일에 대한 의견 : typedef'ing 포인터 내 의견에 큰 실수가 있기 때문에 그것은 당신이 상대하고있는 것을 아는 것이 중요합니다. 나는 그것을 빨아 들여서 꼭 필요한 곳에 struct vertex_t *를 입력했다. –
또한'calloc'을 사용하여 메모리를 할당하고'calloc'은 메모리를 0으로 설정합니다. 그래서 모든 NULL 할당이 필요하지 않습니다. –