2011-04-02 3 views
0

est ici (en partie) mon code:Erreur: Fonction non déclarée dans cette étendue. Aidez-moi?

... 

Node<char*>* nodes[count2];//array of pointers to last level 
    nodes[0] = f1.rootPtr; 
    processInput(input, f1.rootPtr, nodes, 0, count2); 
    //I get an error that says this function is not declared in this scope. 

    return input; 

} 

void processInput(istream& input, Node<char*>* node, Node<char*>** nodeArray, 
     int level, int& count) 
{ 
    //variables 
    Node<char*>* aNode = new Node<char*>(); 
    char charArray[150]; 
... 

Quand je lance le programme que je reçois ceci:

Forest.cpp: In function 'std::istream& operator>>(std::istream&, Forest<char*>&)': 
Forest.cpp:93:53: error: 'processInput' was not declared in this scope 
make[2]: *** [build/Debug/MinGW-Windows/Forest.o] Error 1 
make[1]: *** [.build-conf] Error 2 

Voici une partie du fichier d'en-tête:

template<typename NODETYPE> class Forest{ 

    /* 
    * builds a forests consisting of the first and second forest reference 
    */ 
    template<NODETYPE> 
    friend Forest& operator+(Forest<NODETYPE>& f1, Forest<NODETYPE>& f2); 

    /* 
    * insert into the output stream a preorder traversal of the input forest 
    */ 
    template<NODETYPE> 
    friend ostream& operator<<(ostream& ostr, const Forest<NODETYPE>& f1); 

    /* 
    * extracts a forest from the input stream and builds it for the forest argument variable name 
    */ 
    //template<NODETYPE> 
    friend istream& operator>>(istream& file, Forest<char*>& f1); 

    /* 
    *Used with istream to go through input 
    */ 
    //template<NODETYPE> 
    void processInput(istream& input, Node<char*>* nodeBefore, Node<char*> ** nodeArray, 
     int levelBefore, int& count); 

public: 
    Forest(){ 

.. 

Qu'est-ce que est-ce que je fais mal? Pourquoi ai-je cette erreur? Aucun conseil?

Merci!

EDIT:

J'ai essayé ce que vous avez dit, mais il ne fonctionne toujours pas. J'utilise des modèles, alors peut-être que c'est là que se situe mon problème?

tête:

modèle

// je conserver ce ?? Quand je le sors, il ne fonctionne pas non plus friend istream & opérateur >> (fichier istream &, Forest & f1);

privé:
ProcessInput void (de istream d'entrée &, Node * noeud, noeud ** nodeArray, niveau d'int, int count &);

fichier .cpp:

modèle istream & opérateur >> (istream d'entrée &, Forêt & f1) {// Code ... ProcessInput (entrée, f1.rootPtr, noeuds, 0 , count2); // ERREUR: Impossible de résoudre identifiant ProcessInput }

/** * Traite l'entrée / Forêt vide :: ProcessInput (istream entrée &, Noeud noeud, noeud ** nodeArray, niveau int, int & count) { // code

Merci encore.

Répondre

0

Vous devez préfixer vos fonctions de classe avec le nom de leur classe, faites-vous cela actuellement? Sinon, le compilateur pense que ce sont des fonctions libres.

Par exemple,

void processInput(istream& input, Node<char*>* node, Node<char*>** nodeArray, 
    int level, int& count) { 
    // ...code... 
} 

devrait être

void Forest::processInput(istream& input, Node<char*>* node, Node<char*>** nodeArray, 
    int level, int& count) { 
    // ...code... 
} 
+0

Bien sûr, seule la définition, la déclaration dans la classe elle-même. – Xeo

+0

J'ai essayé ... maintenant je reçois une autre erreur: – Joey

+0

@Xeo: Certainement. J'ai édité pour le rendre un peu plus clair. – Jon

Questions connexes