2012-03-08 43 views
1

我嘗試打印出此列表時出現的錯誤是不兼容的類型錯誤。我試圖將它轉換爲結構宏,靜態結構宏,一個指針,而不是它的工作。嘗試分配不兼容類型時出錯

struct macro { 
    struct macro *next; 
    char * macro_name; 
    char * macro_body; 
}; 

static struct macro macro_list = { 
    .next = NULL, 
    .macro_name = NULL, 
    .macro_body = NULL 
}; 

//-------------------------------------------------------------------------------- 

void macro_list_print(void){ 
    printf("Printing macro_list\n"); 
    if(macro_list.next == NULL){ 
    printf("--No macros\n"); 
    } 
    struct macro p = macro_list; 
    while(p.next != NULL){ 
    printf("%s %s\n",p.macro_name,p.macro_body); 
    p = macro_list.next; //This line gives me the error. 
    } 
} 

我不知道該怎麼辦。任何幫助將被撥出謝謝。

+0

請附上您收到的錯誤。 – 2012-03-08 21:27:38

回答

1

pstruct macromacro_list.nextstruct macro*。更改爲:

struct macro* p = &macro_list; 
while(p != NULL){ 
    printf("%s %s\n",p->macro_name,p->macro_body); 
    p = p->next; 
} 

我提出了以下額外的變化:

  • macro_list.nextp->next,否則就不會得到過去在列表中的第二項。
  • whilep != NULL改變的條件下,否則將不已經處理該列表中的最後一個元素,因爲它是檢查p->next != NULL
+0

它的工作表示感謝。 – 2012-03-08 21:30:46

0

p是macro類型,但macro_list.next是macro *類型。

我將其定義爲struct macro *,而不是將macro_list定義爲struct macro(空名稱和正文)。

此外,當您瀏覽列表時,您希望p = p->next;轉到列表中的下一個項目。事實上,你總是分配macro_list.next,所以你會反覆查看列表中的第一項。

走路鏈表這樣的,我通常使用:

struct macro *macro_list = NULL; 

for (p=macro_list; p!= NULL; p=p->next) 
    printf("%s %s\n", p->macro_name, p->macro_body); 
0

我想,明年是一個指針,所以:

void macro_list_print(void){ 
    printf("Printing macro_list\n"); 
    if(macro_list.next == NULL){ 
    printf("--No macros\n"); 
    } 
    struct macro* p = &macro_list; 
    while(p->next != NULL){ 
    printf("%s %s\n",p->macro_name,p->macro_body); 
    p = macro_list.next; 
    } 
} 
相關問題