0

C++ ソース コードを読んでいて、infix を postfix に変換しています。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 *' に変換できません ...

誰か教えてください。そしてそれを解決する方法について。

完全なソースコードはこちら

4

2 に答える 2

3

演算子の優先順位のため、式

*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
于 2017-01-07T19:07:25.810 に答える
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)

この規則はより読みやすく、将来同様のバグが発生するのを回避します。

于 2017-01-07T19:07:20.880 に答える