【问题标题】:cannot convert 'int' to 'node *'无法将“int”转换为“节点 *”
【发布时间】:2017-01-07 19:04:16
【问题描述】:

我正在阅读 C++ 源代码, 将中缀转换为后缀 我正在使用 Turbo C++

 #include <stdio.h>
 typedef struct node
{
  float data;
  struct node *next;
} stack;

void StackInitiate(stack **head)
{
  //error
  if(*head=(stack *)malloc(sizeof(stack))==NULL)
      exit(1);
  (*head)->next=NULL;
}

// 我得到 .. 无法将 'int' 转换为 'node *' ...

谁能告诉我为什么会这样。以及如何解决它。

完整源代码here

【问题讨论】:

  • Turbo C++——我是不是穿越到了 90 年代?
  • 我希望他们不会让你在学习的地方使用 Turbo C++,而你只是感到困惑......
  • Turbo C++ 仅与我们今天所知道的 C++ 语言相关。我已经添加了“turboc++”标签,我建议也删除 C++ 标签。
  • 一个好习惯。请不要使用涡轮增压c。使用代码块或开发 c++。
  • 谢谢,以后不用了

标签: postfix-notation turbo-c++ infix-operator


【解决方案1】:

因为operator precedence这个表达式

*head=(stack *)malloc(sizeof(stack))==NULL

实际上等价于

*head=((stack *)malloc(sizeof(stack))==NULL)

也就是说,您将比较的值分配给*head

你需要自己加上括号来使它正确:

(*head=(stack *)malloc(sizeof(stack)))==NULL

或者更好的是使用 new 运算符,这是您真正应该使用的在 C++ 中动态分配对象:

(*head=new stack)==NULL

【讨论】:

    【解决方案2】:

    由于运算符优先级规则,如下:

    if(*head=(stack *)malloc(sizeof(stack))==NULL)
    

    被解析为

    if(*head=((stack *)malloc(sizeof(stack))==NULL))
    

    == NULL 比较的结果分配给*head

    若要将 *head 的新值与 null 进行比较,请使用括号更改优先级:

    if((*head=(stack *)malloc(sizeof(stack)))==NULL)
    

    或者更好的是,将赋值与 if 条件分开:

    *head = (stack *) malloc(sizeof(stack));
    if(*head == NULL)
    

    这种约定更具可读性,也可以避免将来发生类似的错误。

    【讨论】:

      猜你喜欢
      • 2016-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多