2010-02-16 9 views
11

Szczerze nie mam pojęcia, dlaczego tak się dzieje. Sprawdziłem, sprawdziłem i potrójnie sprawdziłem nawiasy klamrowe, średniki, przestawiłem konstruktorów itd. I nadal daje mi to błąd.Oczekiwany konstruktor, destruktor lub konwersja typu przed tokenem "*"

Stosuje się odpowiedni kod.

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 

I 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

Byłoby przydatne, jeśli (a) kopiowane w pełnym komunikatem o błędzie, (b) wskazuje, gdzie w kodzie występuje i (c), który kompilator na jakiej platformie ty” ponownie używać. –

+0

Należy wspomnieć, że twoi strażnicy nie są bezpieczni. Nazwa zaczynająca się od znaku podkreślenia niż wielka litera jest zarezerwowana dla kompilatora. Powinieneś zrobić coś takiego jak zmienić '_BINTREE_H' na' BINTREE_H' – GManNickG

Odpowiedz

21

Ze względu na linii:

Node* BinTree::make(float d) 

typ Node jest członkiem class BinTree.

Dodać go:

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

Geez, nie wiedziałeś, że musisz to zrobić. Wielkie dzięki za wyjaśnienie tego dla mnie! – Freezerburn

+2

To trudne. Co ciekawe, NIE musisz kwalifikować * parametrów * z 'BinTree ::' - tylko typy zwracane. –

+1

@j_random_hacker: parametr-deklaracja-klauzula (i wszystko, co jest częścią definicji funkcji po identyfikatorze, który nazywa funkcję) znajduje się w "potencjalnym zakresie deklaracji" dla "definicji klasy" (3.3.6/5 " Zakres klasy "). Innymi słowy, wszyscy członkowie klasy są w zakresie definicji funkcji składowych * po * nazwie funkcji. Tak więc typ zwrotu nie ma korzyści z bycia w zakresie klasy; przychodzi zbyt wcześnie. C++ 0x ma nową składnię * składającą-zwracającą-typ *, która pozwala na obejście tego, ale jest naprawdę dodawana do dedukowania typów zwracanych w szablonach. –

Powiązane problemy