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

cannot convert 'int' to 'node *'

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

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

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)

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

因为 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