Let's consider the following code. It has a class that contains a data and a list of elements of the other class, which houses its own data and a pointer of the first type to relate. It would be schematically like this:
struct nodo
{
dato datonodo;
std::list<arista>ListaAristas;
};
struct arista
{
dato2 datoarista;
nodo* destino;
};
Finally I insert these nodes in a list:
std::list<nodo>lista;
Well, if I directly access a node, and within it to its ListaAristas, I do not have problems, but if it is on the list of nodes, and then, within each element of the list, I try to access your ListAristas, I do not get anything.
This would be an example:
#include <iostream>
#include <list>
struct nombre;
struct relacion
{
std::string datorelacion;
nombre* destino;
relacion(std::string dato):datorelacion(dato) {}
relacion(const relacion& otro):datorelacion(otro.datorelacion)
{
destino = otro.destino;
}
relacion operator=(const relacion& otro)
{
if (this!=&otro)
{
datorelacion=otro.datorelacion;
destino=otro.destino;
return *this;
}
}
};
struct nombre
{
//miembros
std::string datonombre;
std::list<relacion>ListaRelaciones;
//metodos
nombre (std::string dato):datonombre(dato) {}
nombre (const nombre& otro):datonombre(otro.datonombre), ListaRelaciones(otro.ListaRelaciones){}
nombre& operator=(const nombre&otro)
{
if (this!=&otro)
{
datonombre = otro.datonombre;
ListaRelaciones = otro.ListaRelaciones;
return *this;
}
}
};
int main()
{
std::string tipo1="es amigo de ";
std::string tipo2="es enemigo de ";
std::string tipo3="es familar de ";
/***********************************/
std::list<nombre>listanombres;
/**********************************/
nombre N1("Pepe");
listanombres.push_back(N1);
/********************************/
nombre N2("Juan");
listanombres.push_back(N2);
/******************************/
nombre N3("Ana");
listanombres.push_back(N3);
/******************************/
nombre N4("Pepa");
listanombres.push_back(N4);
/********RELACIONES************/
relacion R1(tipo1);
relacion R2(tipo2);
relacion R3(tipo3);
R1.destino = &N2;
R2.destino = &N3;
R3.destino = &N4;
N1.ListaRelaciones.push_back(R1);
N1.ListaRelaciones.push_back(R2);
N2.ListaRelaciones.push_back(R3);
N3.ListaRelaciones.push_back(R3);
/******accedo a un nodo cualquiera de forma directa-->FUNCIONA***********/
for (const auto& elem : N1.ListaRelaciones)
{
std::cout<<N1.datonombre<<" "<<elem.datorelacion<<" "<<elem.destino->datonombre<<"\n";
}
/******accedo a cada elemento de la lista, y luego intento acceder a la ListaArista de cada uno de ellos--->NO FUNCIONA************/
for (const auto& elem : listanombres)
{
std::cout<<elem.datonombre<<" ";
for (auto elem2 : elem.ListaRelaciones)
{
std::cout<<elem2.datorelacion<<" "<<elem2.destino->datonombre;
}
std::cout<<"\n";
}
return 0;
}