Mi ejercicio consiste en esto: Quiero crear una "lista" llamada Carpeta que contiene un arreglo de punteros a Alumno, cada alumno tiene nombre, rut (número de identificación en mi pais) y edad.
En el main cree en un ciclo for que solo agregue 3 alumnos, se pide ingresar por teclado el nombre, rut y edad y se agrega a la carpeta, todo marcha bien, el problema sucede cuando es hora de mostrar los resultados, una vez que termino de ingresar los datos, la última instrucción es desplegar los datos, pero hay un problema con el ciclo for, por que dentro de la función "desplegar" de Carpeta, hay un título que dice "Datos de los alumnos", eso lo imprime correctamente, pero llega al for y comienza el problema y no se por que sera. Ojalá me puedan ayudar.
Les pongo lo que me sale en la pantalla de comandos y el código.
Código:
Ingresando datos
Individuo 1
Ingrese nombre: Juan
Ingrese RUT: 1234
Ingrese edad: 15
Individuo 2
Ingrese nombre: Simon
Ingrese RUT: 4321
Ingrese edad: 17
Individuo 3
Ingrese nombre: Rodrigo
Ingrese RUT: 5678
Ingrese edad: 16
Datos de los alumnos
RUN FAILED (exit value 1,, total time: 36s)
Código
#ifndef CARPETA_H #define CARPETA_H #include "Alumno.h" #include <string> using namespace std; class Carpeta { public: Carpeta(); Carpeta(const Carpeta& orig); virtual ~Carpeta(); void agregarAlumno(Alumno *a); Alumno* getAlumno(string n); void desplegar(); bool isFull(); bool isEmpty(); private: Alumno **alumnos; int cantAlumnos; }; #endif /* CARPETA_H */
Código
#include "Carpeta.h" #include <iostream> #include <string> using namespace std; /* * Constructor por defecto de la carpeta, planeado para un curso de 40 alumnos. */ Carpeta::Carpeta() { this->alumnos = new Alumno*[40]; this->cantAlumnos = 0; } Carpeta::Carpeta(const Carpeta& orig) { } /* * Destructor. */ Carpeta::~Carpeta() { cout << "\nEliminando carpeta"; delete []alumnos; } /* * Funcion que agrega un puntero a Alumno a la lista. */ void Carpeta::agregarAlumno(Alumno *a){ if(isFull()){ cout << "\nEsta lleno"; }else{ alumnos[cantAlumnos]; cantAlumnos++; } } /* * Funcion que devuelve un puntero a Alumno */ Alumno* Carpeta::getAlumno(string nombre){ if(isEmpty()){ cout << "\nEsta vacio\n"; }else{ for(int i=0; i<cantAlumnos; i++){ if(alumnos[i]->getNombre() == nombre){ return alumnos[i]; } } } } /* * Funcion que verifica si la lista esta vacia. */ bool Carpeta::isEmpty(){ if(cantAlumnos == 0){ return true; }else{ return false; } } /* * Funcion que verifica si la lista esta llena. */ bool Carpeta::isFull(){ if(cantAlumnos == 40){ return true; }else{ return false; } } /* * Funcion que despliega todos los alumnos de la lista. */ void Carpeta::desplegar(){ cout <<"\nDatos de los alumnos\n"; for(int i=0; i<cantAlumnos; i++){ cout <<"\nNombre: " << alumnos[i]->getNombre(); cout <<"\nRut: " << alumnos[i]->getRut(); cout <<"\nEdad: " << alumnos[i]->getRut(); } }
Código
#ifndef ALUMNO_H #define ALUMNO_H #include <string> using namespace std; class Alumno { public: Alumno(); Alumno(string n, string r, int e); Alumno(const Alumno& orig); virtual ~Alumno(); string getNombre(); string getRut(); int getEdad(); private: string nombre; string rut; int edad; }; #endif /* ALUMNO_H */
Código
#include "Alumno.h" #include <string> #include <iostream> using namespace std; Alumno::Alumno() { } Alumno::Alumno(string n, string r, int e){ this->nombre = n; this->rut = r; this->edad = e; } Alumno::Alumno(const Alumno& orig) { // Sin implementar. } Alumno::~Alumno() { cout << "\nEliminando alumno"; } string Alumno::getNombre(){ return nombre; } string Alumno::getRut(){ return rut; } int Alumno::getEdad(){ return edad; }
Código
#include <cstdlib> #include <iostream> #include "Alumno.h" #include "Carpeta.h" #include <string> using namespace std; Carpeta carpetaAlumnos; int main(int argc, char** argv) { string nombre; string rut; int edad; cout << "Ingresando datos\n"; for(int i=0; i<3; i++){ cout << "\nIndividuo " << i+1 << "\n"; cout <<"Ingrese nombre: "; getline(cin,nombre); cout <<"Ingrese RUT: "; getline(cin,rut); cout <<"Ingrese edad: "; cin >> edad; Alumno *alumno = new Alumno(nombre,rut,edad); carpetaAlumnos.agregarAlumno(alumno); cin.ignore(); } carpetaAlumnos.desplegar(); return 0; }