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



我正在阅读C ++源代码,将中缀转换为后缀我正在使用涡轮增压 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"转换为"节点*"...

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

完整的源代码在这里

由于运算符优先级,表达式

*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

由于运算符优先级规则,以下内容:

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)

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

最新更新