2012-03-08 42 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; 
    } 
} 
相关问题