Hola _Enko, te agradezco por la pronta respuesta y por el interés en ayudarme.
Mirá, estuve haciendo rápido un código parecido al que tengo para que se entienda mejor cuál es el error.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Nieta {
string nom;
int edad;
vector<int> datos;
public:
Nieta(void) {
nom = ""; edad = 0; datos.clear();
}
Nieta(const string &Nombre, const int &Edad) {
nom = Nombre; edad = Edad; datos.clear();
}
bool CargarNombreyEdad(const string &Nombre, const int &Edad) {
nom = Nombre; edad = Edad;
return (nom == Nombre && edad == Edad)?true:false;
}
bool AgregarDato(const int &UnDato) {
unsigned int tam = datos.size();
datos.push_back(UnDato);
return (tam == datos.size())?true:false;
}
int MostrarDato(const int &Indice) {
return datos[Indice];
}
bool EliminarDato(const int &Indice) {
unsigned int cant = datos.size();
datos.erase(datos.begin()+Indice);
if (datos.size() < cant) return true;
return false;
}
string MostrarNombre(void) {
return nom;
}
};
class Hija {
string nom;
int edad;
vector<Nieta> v_Nietas;
public:
Hija(void) {
nom = ""; edad = 0; v_Nietas.clear();
}
Hija(const string &Nombre, const int &Edad) : nom(Nombre), edad(Edad) {
v_Nietas.clear();
}
bool CargarNombreyEdad(const string &Nombre, const int &Edad) {
nom = Nombre; edad = Edad;
return (nom == Nombre && edad == Edad)?true:false;
}
bool AgregarNieta(const Nieta &UnaNieta) {
unsigned int tam = v_Nietas.size();
v_Nietas.push_back(UnaNieta);
return (tam == v_Nietas.size())?true:false;
}
Nieta MostrarNieta(const int &Indice) {
return v_Nietas[Indice];
}
bool EliminarNieta(const int &Indice) {
unsigned int cant = v_Nietas.size();
v_Nietas.erase(v_Nietas.begin()+Indice);
if (v_Nietas.size() < cant) return true;
return false;
}
};
class Madre {
string nom;
int edad;
vector<Hija> v_Hijas;
public:
Madre(void) {
nom = ""; edad = 0; v_Hijas.clear();
}
Madre(const string&Nombre, const int&Edad) : nom(Nombre), edad(Edad) {
v_Hijas.clear();
}
bool CargarNombreyEdad(const string&Nombre, const int&Edad) {
nom = Nombre; edad = Edad;
return (nom == Nombre && edad == Edad)?true:false;
}
bool AgregarHija(const Hija&UnaHija) {
unsigned int tam = v_Hijas.size();
v_Hijas.push_back(UnaHija);
return (tam == v_Hijas.size())?true:false;
}
Hija MostrarHija(const int&Indice) {
return v_Hijas[Indice];
}
bool EliminarHija(const int&Indice) {
unsigned int cant = v_Hijas.size();
v_Hijas.erase(v_Hijas.begin()+Indice);
if (v_Hijas.size() < cant) return true;
return false;
}
};
int main(int argc, char *argv[]) {
vector<Madre> global_madres;
Madre m1;
global_madres.push_back(m1);
Hija h1;
global_madres[0].AgregarHija(h1);
Nieta n1;
global_madres[0].MostrarHija(0).AgregarNieta(n1);
cout<<global_madres[0].MostrarHija(0).MostrarNieta(0).MostrarNombre()<<endl; //KABOOM, acá explota :(
return 0;
}
Disculpá el desorden, pero como te comentaba, lo hice rápido para que puedas ver más o menos como es el código que me genera error en mi proyecto (está todo en un cpp
).
Si encontrás cuál es el error, desde ya te agradezco muchísimo.
Nota: Pensaba que el problema radicaba en que las clases se inicializaban con basura, pero en los constructores (tanto en el parametrizado como en el vacío) les cargo "algo" aunque sea.
Nuevamente, muchas gracias. Saludos.
Nota: Depurando paso a paso, me remarca las líneas 7 (Declaración clase Nieta), línea 62 (retorno del método "MostrarNieta(const int& Indice)") y la línea 114 (cuando deseo mostrar el nombre de la nieta desde cout).
_Enko, el tema es que no necesariamente serán amigas las clases, ni tampoco necesito un vector de la misma clase dentro de ella (me suena raro y ya planteé la jerarquía de esa forma).
Esto :"cout<<v_Mayor[v_Mayor.size()-1].v_Hija
- .RetornaNieta(0).MostrameDatos()<<endl;" tampoco podría hacerlo, debido a que v_Hija está en el ámbito privado de la clase "Madre".
Si bien, en este ejemplo son bastante similares y podría usar las clases Hija y Nieta heredadas de Madre, en el caso concreto no me serviría, puesto que difieren de mis clases reales (y bastante).
Si alguien puede blanquear el asunto de
Segmentación, le agradezco. Saludos.