尝试分配不兼容的类型时出错

时间:2012-03-08 21:24:08

标签: c types variable-assignment incompatibility

我尝试打印此列表时遇到的错误是不兼容的类型错误。我尝试将其转换为struct macro,static struct macro,指针,但没有一个工作。

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. 
  }
}

我无法弄清楚这里要做什么。任何帮助都会被拨出来谢谢。

3 个答案:

答案 0 :(得分: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,否则它永远不会超过列表中的第二项。
  • while中的条件更改为p != NULL,否则它不会处理列表中的最后一个元素,因为它正在检查p->next != NULL

答案 1 :(得分:0)

p的类型为macro,但macro_list.next的类型为macro *

我没有将macro_list定义为struct macro(空名称和正文),而是将其定义为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);

答案 2 :(得分: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;
  }
}