Hola buenas! Tengo problemas con este código, estoy leyendo un libro "Estructura de datos con C++" viene un ejercicio de crear un directorio apartir de un archivo de texto, viene el codigo y solamente lo estoy copiando, el problema está (creo) al asignar la memoria no sé como arreglarlo, ojalá puedan decirme que está mal :C gracias!
Directory-Entry.h
Arreglo_PD.h
Arreglo_PD.cpp
main()...
Nota: Crear el archivo de texto xD De antemano muchas gracias y espero que puedan ayudarme!
Directory-Entry.h
Código (cpp) [Seleccionar]
#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 (cpp) [Seleccionar]
#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 (cpp) [Seleccionar]
#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 (cpp) [Seleccionar]
#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!