2010-12-06 18 views
3

Für Anfänger ist dies Hausaufgaben, ich brauche nur Hilfe mit einem binären Suchbaum.C++ Hausaufgaben - Binäre Suche Baum Hilfe

Das Programm soll Polymorphismus anzeigen, mit Person als abstrakte Basisklasse und andere Arten von Personen, die Person erben. Jede Person hat einen Nachnamen und ich versuche, einen alphabetischen Suchbaum zu verwenden, um die Personen nach Nachnamen zu alphabetisieren.

Ich habe geschrieben, was ich denke, sollte eine akzeptable binäre Suche Tree sein, aber ich bekomme immer noch Fehler. Der binäre Suchbaum muss nur eine Insert- und eine Traverse-Funktion haben. Welches sollte rekursiv sein.

Der Fehler, den ich bekommen habe ist: Fehler 19 Fehler C4430: fehlende Typspezifizierer - int angenommen bst.cpp

Diese in Zeile Hier 51, 64 und 70 auftritt, ist mein Code:

Kopf Datei:

#ifndef BST_H 
#define BST_H 

template <class T> 
class BST 
{ 
    private: 
     class BinNode 
     { 
      public: 
       BinNode(void); 
       BinNode(T node); 

       BinNode *left; 
       BinNode *right; 
       T data; 
     }; 

     BinNode* root; 

    public: 
     BST(); 
     ~BST(); 

     void insert(const T &); 
     void traverse(); 
     void visit(BinNode *); 


    //Utlity Functions 
    private: 
     void insertAux(BinNode* &, BinNode *); 
     void traverseAux(BinNode *, ostream &); 
}; 

#include "BST.cpp" 
#endif 

Implementierungsdatei:

#include <iostream> 
#include <string> 

using namespace std; 

#ifdef BST_H 

template <class T> 
BST<T>::BinNode::BinNode() 
{ 
    left = right = 0; 
} 

template <class T> 
BST<T>::BinNode::BinNode(T node) 
{ 
    left = right = 0; 
    data = node; 
} 

template <class T> 
BST<T>::BST() 
{ 
    root = 0; 
} 

template <class T> 
void BST<T>::insertAux(T i, BinNode* &subRoot) 
{ 
    //inserts into empty tree 
    if(subRoot == 0) 
     subRoot = new BinNode(i); 
    //less then the node 
    else if(i<subRoot->data) 
     insertAux(i, subRoot->left); 
    //greater then node 
    else 
     insertAux(i, subRoot->right); 
} 

template <class T> 
void BST<T>::insert(const T &i) 
{ 
    insertAux(T i, root) 
} 

template <class T> 
BST<T>::traverse() 
{ 
    traverseAux(root); 
} 

template <class T> 
BST<T>::traverseAux(BinNode *subRoot) 
{ 
    if (subRoot == 0) 
     return; 
    else 
    { 
     traverseAux(subRoot->left); 
     visit(subRoot); 
     traverseAux(subRoot->right); 
    }  
} 

template <class T> 
BST<T>::visit(BinNode *b) 
{ 
    cout << b->data << endl; 
} 

#endif 

Wenn mir jemand einen kurzen Blick darauf werfen und mir ein paar Tipps geben könnte? Es verwirrt mich jetzt wirklich. Vielen Dank!

+1

Bitte geben Sie deutlich die Zeile (n) an, auf der Sie Fehler erhalten. Lass uns nicht zählen. –

+1

'fehlender Typspezifizierer' - Ich frage mich, was es fehlt :) –

Antwort

3

Sie haben den Rückgabetyp für einige Ihrer Funktionsdefinitionen weggelassen.

Zum Beispiel:

template <class T> 
BST<T>::traverse() 
{ 
    traverseAux(root); 
} 

sein sollte:

template <class T> 
void BST<T>::traverse() 
{ 
    traverseAux(root); 
} 
1

Sie BST<T>::traverse()-void BST<T>::traverse()

Ähnliche mit anderen erros ändern sollte.