间接级别与int'int()'不同

时间:2019-01-20 02:38:13

标签: c

我正在构建一个链表,并且试图构建一个添加节点的函数,以测试我通过的名称和大小。

我想用脑袋称呼它,但遇到一些奇怪的错误,我无法调试。

struct Test{
    char name[_MAX_NAME];
    int size;
    struct Test *next;
};

typedef struct Test *node;

node AddNode(node head, char name, int size);

在我的主要

node head = NULL; // is this problem? 
head = AddNode(head,"Test Name",110);
  

错误C2040'AddNode':'节点(node,char,int)'的级别不同   来自“ int()”的间接访问

1 个答案:

答案 0 :(得分:2)

请考虑以下消息:“'node(node,char,int)'的间接访问级别与'int()'”不同。在此消息中,int ()是从不声明函数时提供的默认声明中获取非C标准编译器的类型。也就是说,在声明之前使用AddNode时,它会自动声明为int AddNode()

然后,在代码中稍后出现AddNode声明时,您的声明与默认声明形成对比,然后编译器将打印此消息。

要解决此问题,请在使用AddNode之前声明。这样的声明必须出现在使用它的每个源文件中。 (实际上,声明必须出现在C 翻译单元中,这表示编译源文件时包含的所有文件。翻译单元包括#include包含的头文件。您必须在源文件本身或其包含的文件中声明AddNode。)

此外,您将AddNode声明为node AddNode(node head, char name, int size);,但将第二个参数传递"Test Name"。作为函数参数,"Test Name"充当char *,而不是char,因此您可能希望将声明更改为node AddNode(node head, char *name, int size);