Ver Mensaje Individual
  #10 (permalink)  
Antiguo 28/06/2016, 12:44
dehm
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 2 meses
Puntos: 10
Respuesta: Como declarar un tipo

Bueno, a todo esto, el tema inicial lo he corregido haciendo una declaración previa de "nodo" y "arista". Lo intenté antes pero olvidaba que al ser plantillas había de definri su correspondiente template

El programa main.cpp podría ser el que sale en el post 2

Y ahora los functores. Estos son los que quiero redefinir.

Aquí poco puedo enseñar, porque he modificado bastantes cosas (que como siempre no guardo). Son funciones que hacen algo cuando, por ejemplo, recorro todos los nodos del grafo (mostrar el contenido del nodo, sumarlos, etc)

Edito:
He modificado un poco el código de esta clase, ya que una vez solucionado el problema de que no me reconocía los tipos nodo y arista, ahora el problema lo tengo a la hora de imprimir, puesto que no me reconoce destino que es del tipo struct arista<int, char>* (pArista)
|77|error: invalid use of incomplete type ‘struct arista<int, char>’|

Functores.h:
Código C++:
Ver original
  1. #ifndef FUNCTORES_H
  2. #define FUNCTORES_H
  3.  
  4. #include <iomanip>
  5.  
  6. #include "Grafo.h"
  7.  
  8. //definicion de tipos
  9. typedef char datonodo_t;
  10. typedef int datoarista_t;
  11.  
  12. template <typename DATOA, typename DATON>
  13. struct nodo;
  14.  
  15. template <typename DATOA, typename DATON>
  16. struct arista;
  17.  
  18. typedef nodo<datonodo_t,datoarista_t>* pNodo;
  19. typedef arista<datoarista_t,datonodo_t>* pArista;
  20. typedef nodo<datonodo_t,datoarista_t> t_nodo;
  21. typedef arista<datoarista_t,datonodo_t> t_arista
  22. struct TratarAristaConNiveles
  23. {
  24.     //typedef arista<MedCert,Concepto>* pArista;
  25.     std::pair<pArista,int>pareja;
  26.     std::list<pArista> &listaAristasConMediciones;
  27.     TratarAristaConNiveles(std::pair<pArista,int>par, std::list<pArista>&l):pareja(par),listaAristasConMediciones(l){}
  28.  
  29.     virtual void operator()(std::pair<pArista,int>P)=0;
  30. };
  31.  
  32. struct ImprimirArbol:public TratarAristaConNiveles
  33. {
  34.     ImprimirArbol(std::pair<pArista,int>par, std::list<pArista>&l):TratarAristaConNiveles(par,l){}
  35.     void operator()(std::pair<pArista,int>P)
  36.     {
  37.         std::cout<<P.second<<"-";
  38.         std::cout<<"|";
  39.         for (int i=0;i<P.second;i++)
  40.         {
  41.             std::cout<<"----";
  42.         }
  43.         std::cout<<">";
  44.  std::cout<<
  45.                 std::setw(1)<<std::setfill(' ')<<P.first->destino->datonodo;
  46.                 std::cout<<std::setiosflags(std::ios::right)<<  std::endl;
  47.     }
  48. };
  49.  
  50. #endif // FUNCTORES_H

Muchas gracias, como siempre
__________________
Mi calculadora en Qt

Última edición por dehm; 29/06/2016 a las 00:35