[英]dereferencing pointer to incomplete type error when using typedef struct in C
[英]What is wrong with my struct typedef causing “dereferencing pointer to incomplete type?”
我在使用MakeFile編譯文件時分別遇到5個問題(api.c api.h datastruct.c datastruct.h和main.c)時遇到了我的大學項目的問題,問題出在datastruct.c和datastruct.h中編譯此函數:
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中具有結構定義:
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
仔細閱讀您寫的內容:
vertex new_vertex = NULL; // Declare an element of type 'vertex'
但是什么是vertex
?
typedef struct vertex_t *vertex; // A pointer to a 'struct vertex_t'
那么什么是struct vertex_t
呢? 好吧,它不存在。 您定義了以下內容:
typedef struct _vertex_t {
...
} vertex_t;
這是兩個定義:
struct _vertex_t
vertex_t
沒有諸如struct vertex_t
這樣的東西(關於edge
的推理是相似的)。 將您的typedef更改為:
typedef vertex_t *vertex;
typedef edge_t *edge;
要么:
typedef struct _vertex_t *vertex;
typedef struct _edge_t *edge;
與您的問題無關,正如用戶Zan Lynx在評論中所說,用calloc
分配會將結構的所有成員都清零,因此用NULL
初始化它們是多余的。
您的問題在這里:
typedef struct vertex_t *vertex;
typedef struct edge_t *alduin;
它應該是:
typedef struct _vertex_t *vertex;
typedef struct _edge_t *alduin;
我找到了。
您的問題出在您的typedef中。 在C中,typedef創建一個新的類型名稱。 但是,結構名稱不是類型名稱。
因此,如果將typedef struct vertex_t *vertex
更改為typedef vertex_t *vertex
,它將修復該錯誤消息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.