无法将'int'转换为'node *'

时间:2017-01-07 19:04:17

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

我正在阅读一个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

2 个答案:

答案 0 :(得分:3)

由于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

答案 1 :(得分: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)

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