【问题标题】:What is the error in this part of the code?这部分代码有什么错误?
【发布时间】:2014-08-12 10:54:32
【问题描述】:
typedef struct tree_node
{
    int data;
    struct tree_node *left;
    struct tree_node *right;
}node;

node* newnode(int data)
{
    node *node=(node*)(malloc(sizeof(struct tree_node)));
    node->data=data;
    node->left=NULL;
    node->right=NULL;

    return(node);
}

代码在这部分显示错误。错误是什么?为什么不编译? 编辑:显示的错误是错误:')' 标记之前的预期主表达式。但是,如果我将代码更改为

node* newnode(int data)
{
    node *node1=(node*)(malloc(sizeof(struct tree_node)));
    node1->data=data;
    node1->left=NULL;
    node1->right=NULL;

    return(node1);
}

完美运行。这是什么原因?

【问题讨论】:

  • 什么错误?请给我们更多信息。
  • 你能告诉我们你遇到了什么错误吗?
  • 我认为node *node=(node*)(malloc(sizeof(struct tree_node))); 导致错误!将 *node 更改为 *node1- node *node1=(node*)(malloc(sizeof(struct tree_node)));
  • 请不要将问题标记为 C 和 C++,除非您的问题实际上是关于 C 和 C++。它是哪一个?看起来您已经编写了它以供 C++ 编译器使用。那是对的吗?如果是这样,请删除 C 标签。如果不是,请删除 C++ 标签。任何一种语言都有不适用于另一种语言的正确答案。
  • 对不起..新手用户..我编辑了问题

标签: c data-structures tree


【解决方案1】:

您使用 node 作为类型名,但它是一个变量。 将其更改为:

typedef struct tree_node
{
    int data;
    struct tree_node *left;
    struct tree_node *right;
};

tree_node* newnode(int data)
{
    tree_node *node=(tree_node*)(malloc(sizeof(struct tree_node)));
    node->data=data;
    node->left=NULL;
    node->right=NULL;

    return(node);
}

下次也请分享一下编译器的错误,别指望我们发现...

【讨论】:

  • typedef struct tree_node { .. }; 无效。一些常见的编译器接受它并且似乎默默地忽略了typedef 关键字。
  • @MattMcNabb 这实际上是有效的 IIRC,令人惊讶的是,仅仅是因为标准(可能是偶然的)未能禁止它。但是typedef 关键字在那里确实没用。由于问题现在已正确标记为 C,因此(tree_node*) 需要为(struct tree_node*),或者typedef struct tree_node { ... } tree_node; 是必需的。
  • @hvd hmm, C11 6.7.8/3 似乎暗示必须有一个标识符,但不是很清楚。关于这个主题还有另一个 SO 问题吗?
  • @MattMcNabb 我假设 6.7.8 是类型定义? (这是 C99 中的 6.7.7。)它不禁止这样做;它说明了每个声明符的行为,并且不将“无声明符”视为特殊情况,因此指定忽略 typedef。 6.7/2 中的约束(“声明应至少声明一个声明符(函数的参数或结构或联合的成员除外)、标记或枚举的成员。”)是禁止 @ 987654331@,但是在这种情况下,有一个标签,所以没有违反约束。抱歉,我没有指向其他问题的链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多