首页 > 解决方案 > 头文件中结构定义的编译器错误

问题描述

尝试使用struct头文件中定义的 I 时,我不断遇到编译器问题。

我有两个文件main.c

     #include <stdio.h>
     #include <stdlib.h>
     #include "node.h"

     int main(){
         struct NODE node;
         node.data = 5;
         printf("%d\n", node.data);
         return 0;
     }

以及node.h

#ifndef NODE
#define NODE
    struct NODE{
        int data;
        struct NODE *next;
    };

#endif

我正在编写一个小程序来练习 C 中的一些模块化编程,但是我得到了以下编译器错误:

node.h:5:21: error: expected ‘{’ before ‘*’ token
         struct NODE *next;
                     ^

当我直接在文件中定义时,我得到了main.c编译并执行我想做的事情,但由于某种原因,如果我将定义放在头文件中然后尝试将其包含在. 这非常令人沮丧,我敢肯定这是一件小事,但是有人可以告诉我为什么这不起作用吗?从我一直在阅读的内容来看,我应该能够做到这一点,不是吗?structmain.cmain.c

非常感谢!

标签: cstructheader-files

解决方案


预处理器扩展NODE为空,因为您已经使用宏定义了它。将头文件更改为如下所示:

#ifndef NODE_H
#define NODE_H
    struct NODE{
        int data;
        struct NODE *next;
    };

#endif

推荐阅读