【问题标题】:differs in level of indirection from int 'int ()'与 int 'int ()' 的间接级别不同
【发布时间】:2019-06-13 20:22:51
【问题描述】:

我正在构建一个链表,我正在尝试构建一个函数来添加一个节点,以测试我传递了一个名称和大小。

我想用我的头脑调用它,但我得到了一些我无法调试的奇怪错误。

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 (node,char,int)' 的级别不同 来自'int()'的间接引用

【问题讨论】:

  • 什么是1101 - 哪个是size
  • 很抱歉,这是我之前尝试过的更改,但我忘记了编辑。我修好了
  • 函数期望char,你正在传递char*
  • 为什么要复习的最好例子:Is it a good idea to typedef pointers?——如果没有Conversations:A Midsummer Night's Madness,这绝对不是一堂完整的课“混乱是编程的阴暗面。太多的类型定义,糟糕的命名选择——这些都会导致......”
  • @DavidC.Rankin:不,不是。消息“'node (node,char,int)' 在间接级别上与 'int ()' 不同”表明 AddNode 有一个默认声明 int AddNode(),这意味着 OP 在使用它之前省略了它的声明,并且问题与类型定义或间接级别无关。

标签: c


【解决方案1】:

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

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

要解决此问题,请在使用之前声明 AddNode。这样的声明必须出现在使用它的每个源文件中。 (其实声明必须出现在Ctranslation unit中,也就是编译一个源文件时包含的所有文件。translation unit包括#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);

【讨论】:

    猜你喜欢
    • 2020-04-07
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 2019-06-21
    • 2013-02-18
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多