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

C 尝试分配不兼容类型时出错,c,types,variable-assignment,incompatibility,C,Types,Variable Assignment,Incompatibility,尝试打印此列表时出现的错误是不兼容的类型错误。我尝试将它转换为结构宏、静态结构宏、指针,但都不起作用 struct macro { struct macro *next; char * macro_name; char * macro_body; }; static struct macro macro_list = { .next = NULL, .macro_name = NULL, .macro_body = NULL }; //----------------

尝试打印此列表时出现的错误是不兼容的类型错误。我尝试将它转换为结构宏、静态结构宏、指针,但都不起作用

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

我不知道该怎么办。任何帮助都可以,谢谢

p
是一个
struct宏
,而
macro\u列表。下一个
是一个
struct宏*
。改为:

struct macro* p = &macro_list;
while(p != NULL){
    printf("%s %s\n",p->macro_name,p->macro_body);
    p = p->next;
}
我做了以下额外更改:

  • macro\u list.next
    p->next
    ,否则它将永远无法通过列表中的第二项
  • 中的条件更改为
    p!=NULL,否则在检查
    p->next!=空

  • p
    是一个
    struct宏
    ,而
    macro\u列表。下一个
    是一个
    struct宏*
    。改为:

    struct macro* p = &macro_list;
    while(p != NULL){
        printf("%s %s\n",p->macro_name,p->macro_body);
        p = p->next;
    }
    
    我做了以下额外更改:

    • macro\u list.next
      p->next
      ,否则它将永远无法通过列表中的第二项
    • 中的条件更改为
      p!=NULL,否则在检查
      p->next!=空

    p为
    宏类型
    ,但宏列表。下一个为
    宏类型*

    我没有将宏列表定义为
    struct宏
    (名称和正文为空),而是将其定义为
    struct宏*

    此外,当您浏览列表时,您需要
    p=p->next
    以转到列表中的下一项。实际上,您总是分配
    宏\u列表。下一步
    ,因此您将重复查看列表中的第一项

    要浏览这样的链接列表,我通常会使用:

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

    p的类型为
    macro
    ,但macro\u list的类型为
    macro*

    我没有将宏列表定义为
    struct宏
    (名称和正文为空),而是将其定义为
    struct宏*

    此外,当您浏览列表时,您需要
    p=p->next
    以转到列表中的下一项。实际上,您总是分配
    宏\u列表。下一步
    ,因此您将重复查看列表中的第一项

    要浏览这样的链接列表,我通常会使用:

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

    我假设next是一个指针,所以:

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

    我假设next是一个指针,所以:

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

    请包括您收到的错误。请包括您收到的错误。