資料結構實驗二(C)error: dereferencing pointer to incomplete type
常為結構體未定義
————————
第一種情況:已有結構體定義在.h檔案中,當前檔案未包含該結構體所在 .h 檔案。
解決辦法:包含對應標頭檔案。
第二種情況:已有結構體定義在.c檔案中。
解決辦法:將該結構體定義到.h檔案中,然後再包含該標頭檔案,或者直接將該結構體定義到當前.c檔案中。
#include<stdio.h> #include<stdlib.h> #include<malloc.h> #ifndef __linkedList__H #define __linkedList__H //防止標頭檔案被多次包含 #define MaxSize 100 typedefint elementType; /*連結串列的定義*/ typedef struct{ //*****正確寫法:typedef struct node{***** elementType data; //存放資料 struct node* next; //當前表 }node; #endif /*插入值為x的元素並保持遞增有序性*/ void listInsert_(node* L, elementType x) { node* p=L; node* u; while((p->next->data)<x){ //報錯 原始檔已包含該.h檔案 error: dereferencing pointer to incomplete typep = p->next; } u = (node*)malloc(sizeof(node)); u->data = x; u->next = p->next; p->next = u; }
/*4. 將單鏈表L中的奇偶數項節點分解開,分別放入新的單鏈表中,同時輸出到螢幕上*/
void analyzeList(node* L, node* L1, node* L2)
{
node* u;
u = (node*)malloc(sizeof(node));
node* p=L;
node* p1=L1;
node* p2=L2;
while(p->next!=NULL)
{
u = p->next;
p->next = u->next;
u->next = NULL;
if((p->next->data)%2==0){ //報錯 error: dereferencing pointer to incomplete type
p1->next = u;
p1 = p1->next;
}else
{
p2->next = u;
p2 = p2->next;
}
}
}
/*求兩個遞增有序單鏈表L1和L2中的公共元素,放入L3中*/
void SimilarList(node* L1, node* L2, node* L3)
{
node* u =(node*)malloc(sizeof(node));
node* p1 = L1->next;
node* p2 = L2->next;
node* p3 = L3->next;
while(p1->next!=NULL && p2->next!=NULL)
{
if(p1->next->data == p2->next->data)
{
u = p1->next;
u->next = NULL;
p3->next = u;
p3 = p3->next;
p1 = p1->next;
p2 = p2->next;
}else if(p1->next->data < p2->next->data) //報錯 error: dereferencing pointer to incomplete type
{
p1 = p1->next;
}else{
p2 = p2->next;
}
}
}