Directory-Entry.h
Código
#include <iostream> using namespace std; class Entrada_Directorio{ public: Entrada_Directorio(string _Nombre, string _Numero) : Nombre(_Nombre), Numero(_Numero){} Entrada_Directorio(){} string dar_Nombre() const {return Nombre;} string dar_Numero() const {return Numero;} void mod_Numero(const string &nuevo_Numero) {Numero=nuevo_Numero;} private: string Nombre; string Numero; };
Arreglo_PD.h
Código
#include <string> #include "Directory-Entry.h" using namespace std; class Directorio_Tel{ public: Directorio_Tel(){} // Cuando lo pongo como Directorio_Tel(); me da error al crear el objeto ~Directorio_Tel(){} void cargar_datos(const string &nombre_arch); string buscar_nom(const string &Nombre) const; string anadir_modif(const string &Nombre, string &Numero); string eliminar(const string &Nombre); void guardar(); friend ostream& operator<<(ostream &os, const Directorio_Tel &Tel); private: int buscar(const string &Nombre) const; void agregar(const string &Nombre, string &Numero); void eliminar(int num); void realocar(); int tamano; int capacidad; Entrada_Directorio* Directorio; string nombre_arch; bool modificado; };
Arreglo_PD.cpp
Código
#include "Arreglo_PD.h" #include <fstream> #include <conio.h> using namespace std; void Directorio_Tel::cargar_datos(const string &nombre_arch){ this->nombre_arch=nombre_arch; ifstream in(nombre_arch.c_str()); if (in){ string Nombre; string Numero; while (getline(in,Nombre,'\n')){ if (getline(in,Numero,'\n')){ cout<<Nombre<<endl; cout <<Numero<<endl; //Coloqué esto para ver como se van agregando los nombres... agregar(Nombre, Numero); //Desde aqui todo bien al mandar a llamar esta funcion } } in.close();//No entiendo como es que (según el libro) esto logra cargar todo el archivo... } } string Directorio_Tel::buscar_nom(const string &Nombre) const { int num=buscar(Nombre); if(num!=-1){ return Directorio[num].dar_Numero(); } else { return ""; } } string Directorio_Tel::anadir_modif(const string &Nombre, string &Numero) { string numero_ant=""; int num=buscar(Nombre); if(num!=-1){ numero_ant=Directorio[num].dar_Numero(); Directorio[num].mod_Numero(Numero); } modificado=true; return numero_ant; } string Directorio_Tel::eliminar(const string &Nombre){ ; } void Directorio_Tel::guardar() { if (modificado){ ofstream out(nombre_arch.c_str()); for(int i=0; i<tamano; i++){ out << Directorio[i].dar_Nombre() <<endl; out << Directorio[i].dar_Numero() <<endl; } out.close(); modificado=false; } } int Directorio_Tel::buscar(const string &Nombre) const { for(int i=0; i<tamano; i++){ if (Directorio[i].dar_Nombre()==Nombre) return 1; } return -1; } void Directorio_Tel::agregar(const string &Nombre, string &Numero) { if(tamano==capacidad) realocar(); //Aquí llama a la función erronea Directorio[tamano]=Entrada_Directorio(Nombre,Numero); tamano++; } void Directorio_Tel::eliminar(int num) { ; } //Esta es la funcion que da error void Directorio_Tel::realocar() { capacidad*=2; Entrada_Directorio* nuevo_Directorio=new Entrada_Directorio[capacidad]; getch(); //Este getch lo puse por que después de aquí se hace el error for(int i=0; i<tamano; i++){ nuevo_Directorio[i]=Directorio[i]; } delete[] Directorio; Directorio=nuevo_Directorio; } ostream& operator<<(ostream &os, const Directorio_Tel &Tel) { for(int i=0; i<Tel.tamano; i++){ os<<Tel.Directorio[i].dar_Nombre()<<endl; os<<Tel.Directorio[i].dar_Numero()<<endl<<endl; } return os; }
main()...
Código
#include <iostream> #include "Arreglo_PD.h" using namespace std; int main(){ Directorio_Tel D1; D1.cargar_datos("Directorio.txt"); cout << D1; }
Nota: Crear el archivo de texto xD De antemano muchas gracias y espero que puedan ayudarme!