我正在构建一个链表,并且试图构建一个添加节点的函数,以测试我通过的名称和大小。
我想用脑袋称呼它,但遇到一些奇怪的错误,我无法调试。
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()”的间接访问
答案 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);
。