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#ifndef FUNCTORES_H
#define FUNCTORES_H
#include <iomanip>
#include "Grafo.h"
//definicion de tipos
typedef char datonodo_t;
typedef int datoarista_t;
template <typename DATOA, typename DATON>
struct nodo;
template <typename DATOA, typename DATON>
struct arista;
typedef nodo<datonodo_t,datoarista_t>* pNodo;
typedef arista<datoarista_t,datonodo_t>* pArista;
typedef nodo<datonodo_t,datoarista_t> t_nodo;
typedef arista<datoarista_t,datonodo_t> t_arista
struct TratarAristaConNiveles
{
//typedef arista<MedCert,Concepto>* pArista;
std::pair<pArista,int>pareja;
std::list<pArista> &listaAristasConMediciones;
TratarAristaConNiveles(std::pair<pArista,int>par, std::list<pArista>&l):pareja(par),listaAristasConMediciones(l){}
virtual void operator()(std::pair<pArista,int>P)=0;
};
struct ImprimirArbol:public TratarAristaConNiveles
{
ImprimirArbol(std::pair<pArista,int>par, std::list<pArista>&l):TratarAristaConNiveles(par,l){}
void operator()(std::pair<pArista,int>P)
{
std::cout<<P.second<<"-";
std::cout<<"|";
for (int i=0;i<P.second;i++)
{
std::cout<<"----";
}
std::cout<<">";
std::cout<<
std::setw(1)<<std::setfill(' ')<<P.first->destino->datonodo;
std::cout<<std::setiosflags(std::ios::right)<< std::endl;
}
};
#endif // FUNCTORES_H
Muchas gracias, como siempre