2010-02-16 6 views
11

왜 이런 일이 발생하는지 솔직히 알지 못합니다. 체크, 이중 체크, 중괄호, 세미콜론, 생성자 이동, 등등.이 에러는 여전히 나에게 있습니다.'*'토큰 앞에 예상 생성자, 소멸자 또는 형식 변환이 있습니다.

관련 코드는 다음과 같습니다. 때문에 라인

BinTree.h

#ifndef _BINTREE_H 
#define _BINTREE_H 

class BinTree 
{ 
private: 
    struct Node 
    { 
     float data; 
     Node *n[2]; 
    }; 
    Node *r; 

    Node* make(float); 

public: 
    BinTree(); 
    BinTree(float); 
    ~BinTree(); 

    void add(float); 
    void remove(float); 

    bool has(float); 
    Node* find(float); 
}; 

#endif 

그리고 BinTree.cpp

#include "BinTree.h" 

BinTree::BinTree() 
{ 
    r = make(-1); 
} 

Node* BinTree::make(float d) 
{ 
    Node* t = new Node; 
    t->data = d; 
    t->n[0] = NULL; 
    t->n[1] = NULL; 
    return t; 
} 
+2

그것은 유용 할 것, (b)에 표시되는 컴파일러 플랫폼을 당신 '에 다시 사용하십시오. –

+0

포함 경비원이 안전하지 않다는 것을 언급해야합니다. 대문자보다 밑줄 문자로 시작하는 이름은 컴파일러 용으로 예약되어 있습니다. 'BINTREE_H'를'BINTREE_H'로 바꾸는 것과 같은 일을해야합니다. – GManNickG

답변

21

:

Node* BinTree::make(float d) 

유형 Nodeclass BinTree의 부재이다.

을 확인 : 코드에가 (C) 발생 위치를 (a)는 전체 오류 메시지에 복사 한 경우

BinTree::Node* BinTree::make(float d) 
+0

이런, 그렇게해야한다는 것을 몰랐습니다. 나를 위해 그것을 정리해 주셔서 많은 감사합니다! – Freezerburn

+2

그것은 까다 롭습니다. 흥미롭게도'BinTree ::'로 매개 변수 *를 한정 할 필요는 없으며 반환 유형 만 한정합니다. –

+1

@j_random_hacker : 매개 변수 선언 절 (함수를 명명하는 식별자 다음에 함수 정의의 일부인 모든 항목)은 '클래스 정의'(3.3.6/5 " 클래스 범위 "). 다시 말해, 클래스의 모든 멤버는 함수 이름 뒤에 * 멤버 정의 *를 정의 할 수 있습니다. 따라서 리턴 타입은 클래스 범위에있는 이점을 얻지 못합니다. 너무 일찍옵니다. C++ 0x에는이 문제를 해결할 수있는 새로운 * 후행 반환 형식 * 구문이 있지만 실제로 템플릿의 반환 형식을 추론하기 위해 추가됩니다. –

관련 문제