2017-01-07 5 views
0

은 내가 // 내가 갖는 터보 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; 
} 

을 사용하고 을 접미사에하는 중위로 변환하는 C++ 소스 코드를 읽고 오전에 'INT'을 변환 할 수 없습니다 .. 변환 할 수 없습니다 ' int 'to'node * '...

누구나 왜 그렇게 말해 줄 수 있습니다. 그것을 해결하는 방법을 안부.

전체 소스 코드 때문에 연산자 우선 순위 규칙 here

+3

Turbo C++ - 90 분 여행을 했나요? – Hogan

+0

나는 그들이 터보 C++를 당신의 공부 장소에서 사용하게 만들지 않기를 희망합니다. 당신은 단지 혼란 스럽습니다 ... – DeiDei

+0

터보 C++는 우리가 오늘날 알고있는 것처럼 C++ 언어와 접하게 연관되어 있습니다. "turboC++"태그를 추가했으며 C++ 태그를 제거하는 것이 좋습니다. –

답변

3

입니다
*head=((stack *)malloc(sizeof(stack))==NULL) 

실제로 동일합니다, 당신은 *head에 비교의 값을 할당합니다. 당신이 rreally 동적으로 C++에서 객체를 할당하는 데 사용해야하는 것입니다 어느 new 연산자를 사용하여 더 나은 아직

(*head=(stack *)malloc(sizeof(stack)))==NULL 

을 또는 :

귀하는이 올바른지 확인하기 위해 자신의 괄호 안에 넣어야

(*head=new stack)==NULL 
2

, 다음

if(*head=(stack *)malloc(sizeof(stack))==NULL) 

*head== NULL 비교의 결과에 할당된다

if(*head=((stack *)malloc(sizeof(stack))==NULL)) 

로서 해석된다. ,

if((*head=(stack *)malloc(sizeof(stack)))==NULL) 

심지어 더 나은 경우 조건에서 할당을 분리 :

*head = (stack *) malloc(sizeof(stack)); 
if(*head == NULL) 

이 협약

는, 우선 순위를 변경하려면 괄호를 사용하는 대신 null로 *head의 새로운 값을 비교하려면 더 읽기 쉽고 앞으로 유사한 버그가 발생하는 것을 피할 수 있습니다. 때문에 operator precedence 표현

*head=(stack *)malloc(sizeof(stack))==NULL