Foros del Web » Programación para mayores de 30 ;) » C/C++ »

No matching function for call...!!

Estas en el tema de No matching function for call...!! en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 01/06/2011, 21:41
 
Fecha de Ingreso: mayo-2009
Mensajes: 4
Antigüedad: 14 años, 10 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!

Etiquetas: nodo, recorrido, template, arboles, graficos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:02.