我正在阅读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)
此约定更具可读性,并且还可以避免将来发生类似的错误。