Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/06/2011, 21:41
BlastDV
 
Fecha de Ingreso: mayo-2009
Mensajes: 4
Antigüedad: 14 años, 11 meses
Puntos: 0
Pregunta No matching function for call...!!

Hola, estoy montando un proyecto con grafos, y por los momentos estoy implementando un template para declarar un arbol que necesito y sus respectivas operaciones adicional a un archivo testing.cpp que uso para probar todo. He logrado que el codigo de insercion de nodos funcione, pero el problema lo tengo al recorrer!

Implemente un procedimiento llamado recorrer que se supone atraviesa todo el arbol y (por los momentos) me imprime el valor de los nodos, aqui esta el codigo del template:
Código C++:
Ver original
  1. // Definiciones para arboles!
  2. template <typename clase>
  3. class hoja
  4. {
  5.     public:
  6.         clase *contenido;
  7.  
  8.         //Hijos
  9.         hoja <clase> *left;
  10.         hoja <clase> *right;
  11.  
  12.         //Metodos constructores
  13.         hoja ()
  14.         {
  15.             left= NULL;
  16.             right= NULL;
  17.             contenido= NULL;
  18.         }
  19.        
  20.         hoja (clase nuevo)
  21.         {
  22.             left= NULL;
  23.             right= NULL;
  24.             contenido= new clase;
  25.             *contenido= nuevo;
  26.         }
  27.        
  28.         //Metodos set
  29.  
  30.         void setContenido (clase nuevo)
  31.         {
  32.             contenido= new clase;
  33.             *contenido= nuevo;
  34.         }
  35.  
  36.         void setLeft (hoja <clase> *n) { left = n; }
  37.         void setRight (hoja <clase> *n) { right= n; }
  38.         //Metodos get
  39.  
  40.         hoja *getLeft () { return left; }
  41.         hoja *getRight () { return right; }
  42.         clase *getData () { return *contenido; }
  43.        
  44.         //Operaciones
  45.         bool eshoja () { return (left==NULL && right==NULL); }
  46.         int gradonodo ()
  47.         {
  48.             int grado=0;
  49.             if (left!=NULL)
  50.                 grado++;
  51.             if (right!=NULL)
  52.                 grado++;
  53.  
  54.             return grado;
  55.         }
  56. };
  57.  
  58. template <typename clase>
  59. class ArbinB
  60. {
  61.     public:
  62.         hoja <clase> *ABB;
  63.         hoja <clase> *posicion;
  64.  
  65.         ArbinB ()
  66.         {
  67.             ABB= NULL;
  68.             posicion= ABB;
  69.         }
  70.  
  71.         //Operaciones
  72.         int insertar (clase e)
  73.         {
  74.             hoja <clase> *act;
  75.             hoja <clase> *padre;
  76.             bool encontrado;
  77.             act= ABB;
  78.             padre= NULL;
  79.             encontrado= false;
  80.            
  81.             while (!encontrado && act!=NULL)
  82.             {
  83.                 padre= act;
  84.                 if (e.clave<act->contenido->clave)
  85.                     act= act->left;
  86.                 else
  87.                 if (e.clave>act->contenido->clave)
  88.                     act= act->right;
  89.                 else
  90.                     encontrado= true;
  91.             }
  92.  
  93.             if (encontrado)
  94.                 return -1;
  95.             else
  96.             {
  97.                 hoja <clase> *aux= new hoja <clase> (e);
  98.  
  99.                 if (padre==NULL)
  100.                     ABB=aux;
  101.                 else
  102.                 {
  103.                     if (e.clave<padre->contenido->clave)
  104.                         padre->left= aux;
  105.                     else
  106.                         padre->right=aux;
  107.                 }
  108.                 return 1;
  109.             }
  110.         }
  111. };
  112.  
  113. //Operaciones
  114. template <typename clase>
  115. void recorrer (hoja <clase> ABB, int recorrido) //Donde recorrido= 0: simetrico, -1: preorden, 1: postorden
  116. {
  117.     hoja <clase> *aux;
  118.     aux= ABB;
  119.     if (aux!=NULL)
  120.     {
  121.         switch (recorrido)
  122.         {
  123.             case -1:
  124.                 //visitar();
  125.                 printf ("\n%d", aux->contenido->clave);
  126.                 recorrer (aux->left, -1);
  127.                 recorrer (aux->right, -1);
  128.                 break;
  129.             case 0:
  130.                 recorrer (aux->left, 0);
  131.                 //visitar();
  132.                 printf ("\n%d", aux->contenido->clave);
  133.                 recorrer (aux->right, 0);
  134.                 break;
  135.             case 1:
  136.                 recorrer (aux->left, 1);
  137.                 recorrer (aux->right, 1);
  138.                 //visitar();
  139.                 printf ("\n%d", aux->contenido->clave);
  140.                 break;
  141.         }
  142.     }
  143. };

Y obtengo un error de compilacion en el testing.cpp en la linea recorrer (Arbol, 0) ;

Aqui el codigo del testing.cpp:
Código C++:
Ver original
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include "node_dealing.h"
  4. using namespace std;
  5.  
  6. class contenido
  7. {
  8.     public:
  9.         int clave;
  10.  
  11.         contenido ()
  12.         {
  13.             clave=0;
  14.         }
  15. };
  16.  
  17. int main ()
  18. {
  19.     ArbinB <contenido> Arbol;
  20.     contenido c;
  21.     int k=0;
  22.    
  23.     c.clave= 5;
  24.     k= Arbol.insertar (c);
  25.     c.clave= 7;
  26.     k= Arbol.insertar (c);
  27.     c.clave= 3;
  28.     k= Arbol.insertar (c);
  29.     c.clave= 9;
  30.     k= Arbol.insertar (c);
  31.     printf ("%d", k);
  32.     //printf ("\n%d", Arbol.ABB->contenido->clave);
  33.     //printf ("\n%d", Arbol.ABB->right->contenido->clave);
  34.    
  35.     recorrer (Arbol, 0) ;
  36.      //Donde recorrido= 0: simetrico, -1: preorden, 1: postorden
  37. }

Alguien tiene alguna idea de porque no se encuentra la funcion recorrer si esta esta declarada en el template y el mismo lo incluyo exitosamente (ya que como ven el resto de operaciones si funciona)

Gracias!