2011-02-28 4 views
0
struct node* NewNode(int data) 
{ 
    struct node* node = new(struct node); 
    node->data = data; 
    node->left = NULL; 
    node->right = NULL; 
    return(node); 
} 

이 오류는 함수의 첫 번째 줄에 표시됩니다. 뭐가 잘못 됐는지 알아 낸거야? 감사합니다. .new 연산자 (오류 : 구조체 앞에 예상되는 표현식)

+0

해당 C++ 전용. 구조 노드 * 노드 = 새로운 노드와 같은 작업을 시도했는데 오류도 발생했습니다. – Ava

+1

작성한 방식은 자유롭지 만 합법적입니다. 실제 오류를 포함하도록 게시물을 편집하고'struct node'의 정의를 작성해야합니다. – rlibby

+1

어떤 컴파일러 (버전 포함 포함)? 문제를 나타내는 완전한 파일이 될만큼 충분한 코드를 제공 할 수 있습니까? –

답변

2

이 코드는 Comeau try-it-out에서 완벽하게 정상적으로 컴파일 :

#define NULL 0 

struct node 
{ 
    int data; 
    struct node* left; 
    struct node* right; 
}; 

struct node* NewNode(int data) 
{ 
    struct node* node = new(struct node); 
    node->data = data; 
    node->left = NULL; 
    node->right = NULL; 
    return(node); 
} 
+0

효과가있었습니다. 감사합니다 :) – Ava

3

"새로운"키워드 힌트를이 존재의 C++에서. C++에서 "struct TYPENAME"구조는 대체로 쓸모가 없으므로 간단히 TYPENAME을 사용할 수 있습니다. 명명 된 구조체에서 형식 이름을 typedefing하는 C 방법은 C++에서 암시 적입니다.

node* NewNode(int data) 
{ 
    node* pnode = new node; 
    pnode->data = data; 
    pnode->left = NULL; 
    pnode->right = NULL; 
    return(pnode); 
} 

이는 C++입니다 경우 잘 작동합니다. 형식과 변수에 같은 이름을 사용하는 것은 좋은 생각이 아닙니다. 일부 명명 규칙 (헝가리 또는 기타)이 도움이됩니다.

+0

+1 -하지만 로컬 변수에 대한'pnode'는 C++에서 조금 이상합니다. 헝가리어는 C에서 의미가 있지만 실제로 C++에서는 그렇지 않습니다. C-that-C++ 스타일 코드를 작성하지 않는 한 말입니다. 'p'접두어는 C++의 포인터보다 매개 변수를 나타낼 가능성이 훨씬 높습니다. 이는 C에있는 규칙이기도합니다. – Steve314

+2

그래서 "헝가리어 또는 기타"라고 썼습니다. C++에서 일관된 명명 규칙을 사용하면 불쾌감을 느끼게됩니다. 그리고 당신이 고집하는 한 당신이 선택하는 관례는 중요하지 않습니다. – COrthbandt

+0

모두에게 감사드립니다! 나는 제안 된대로 시정 할 것이다. – Ava

관련 문제