2010-12-06 7 views
3

Pour les débutants c'est le devoir, j'ai juste vraiment besoin d'aide avec un arbre de recherche binaire. Le programme est d'afficher le polymorphisme, en utilisant la personne comme une classe de base abstraite, et d'autres types de personnes qui héritent de la personne. Chaque personne a un nom de famille, et j'essaie d'utiliser un arbre de recherche binaire pour alphabétiser les gens par nom de famille.C++ Homework - Arbre de recherche binaire Aide

J'ai écrit ce que je pense devrait être un arbre de recherche binaire acceptable, mais je reçois toujours des erreurs. L'arbre de recherche binaire n'a besoin que d'une fonction insert et traverse. Ce qui devrait être récursif.

L'erreur que je reçois est: Erreur 19 Erreur C4430: Type manquant spécificateur - int supposé bst.cpp

Cela se produit à la ligne 51, 64 et 70. Voici mon code:

tête fichier:

#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 

fichier de mise en œuvre:

#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 

Si quelqu'un pouvait jeter un coup d'oeil rapide à ceci pour moi et me donner quelques conseils? Cela m'embrouille vraiment en ce moment. Merci!

+1

Veuillez indiquer clairement la (les) ligne (s) sur laquelle vous avez des erreurs. Ne nous fais pas compter. –

+1

'spécificateur de type manquant' - je me demande ce qu'il manque :) –

Répondre

3

Vous avez omis le type de retour sur certaines de vos définitions de fonctions.

Par exemple:

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

devrait être:

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

Vous devez changer BST<T>::traverse()-void BST<T>::traverse()

similaires avec d'autres erros.