无法将 '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
我正在阅读 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