No entiendo este error - Ayuda

Iniciado por Cero++, 23 Diciembre 2018, 22:31 PM

0 Miembros y 1 Visitante están viendo este tema.

Cero++

Buenas, les adjunto el código, prácticamente todo esta bien, ya no sé si lógicamente pero al compilar por lo menos sí.

Aquí el código:

Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;
using namespace std;
struct Fecha{
int dd,mm,aa;
};
/*
Estado civil:
-1"soltero"
0 "casado"
1 "viudo"
*/
class Persona{
string nom_ape; int DNI, estado_civil; Fecha fecha_nacimiento;
public:
void Cargar_datos(string _nom, int _dni, int _civil, Fecha _d_nacimiento);
int Edad(Fecha _actual){ //retorno la edad;
int aux=_actual.aa-fecha_nacimiento.aa;
return aux;
}
string Ver_nombre(){
return nom_ape;
}
};
void Persona:: Cargar_datos(string _nom, int _dni, int _civil, Fecha _d_nacimiento){
nom_ape=_nom; DNI=_dni; estado_civil=_civil; fecha_nacimiento=_d_nacimiento;
}

class Alumno: public Persona{
float promedio; int cantidad_aprovadas;
public:
void Agregar_prom(float _prom){
promedio=_prom;
}
void Materias_apro(int _apro){
cantidad_aprovadas=_apro;
}
float Ver_promedio(){
return promedio;
}
float Merito_academico(){
float aux=promedio*cantidad_aprovadas;
return aux;
}
};

class Docente:public Persona{
Fecha ingreso;
public:
void Agregar_fecha_ingreso(Fecha _f){
ingreso=_f;
}
int Antiguedad(Fecha _actual){
int aux=ingreso.aa-_actual.aa;
return aux;
}
};

class Curso{
string nombre_curso; Docente D; Alumno *A=nullptr; int size;
public:
Curso(int _i){
if(_i<=50){
size=_i;
A=new Alumno [size];
}else{
cerr<<"Supero el limite maximo de alumnos (50)"<<endl;
exit(1);
}

}
void Agregar_docente(Docente _d){
D=_d;
}
void Agregar_alumno(Alumno _a, int _i){
A[_i]=_a;
}
void Nom_d_curso(string _nom){
nombre_curso=_nom;
}
Alumno Mejor_promedio();
};
Alumno Curso::Mejor_promedio(){
Alumno aux=A[0];
for(int i=1;i<size;i++) {
if(aux.Ver_promedio()<A[i].Ver_promedio()){
aux=A[i];
}
}
return aux;
}
int main(int argc, char *argv[]) {
int size; Alumno A; Docente D;
cout<<"Ingrese la cantidad de alumnos en el curso: "; cin>>size;
Curso C(size);
cout<<"Seleccione la opcion para proceder :";
cout<<"1 -> Agregar alumnos"<<endl;
cout<<"2 -> Agregar Docente a cargo"<<endl;
cout<<"Presione cualquier numero para salir del programa"<<endl;
int caso; cin>>caso;
switch(caso){
case 1:
cout<<"Ahora ingrese los datos de los alumnos:"<<endl;
for(int i=0;i<size;i++) {
string nom_ape; int dni,estado_civil,materias_apro; Fecha d_nacimiento;
float promedio;
cout<<"Ingrese el nombre y apellido: "; cin>>nom_ape;
cout<<"Ingrese el DNI: "; cin>>dni;
cout<<"Ingrese el estado civil: "; cin>>estado_civil;
cout<<"Ingrese la fecha de nacimiento :";
cin>>d_nacimiento.dd; cin>>d_nacimiento.mm; cin>>d_nacimiento.aa;
cout<<"Ingrese el promedio del alumno :"; cin>>promedio;
cout<<"Ingrese la cantidad de materias aprovadas: "; cin>>materias_apro;
cout<<"-----------------------------"<<endl;
A.Cargar_datos(nom_ape,dni,estado_civil,d_nacimiento);
A.Materias_apro(materias_apro);
A.Agregar_prom(promedio);
C.Agregar_alumno(A,i);
}
break;
case 2:
cout<<"Ingrese los datos del Docente"<<endl;
string nom_ape; int dni,estado_civil;
Fecha d_nacimiento, ingreso_laboral;
cout<<"Ingrese el nombre y apellido: "; cin>>nom_ape;
cout<<"Ingrese el DNI: "; cin>>dni;
cout<<"Ingrese el estado civil: "; cin>>estado_civil;
cout<<"Ingrese la fecha de nacimiento :";
cin>>d_nacimiento.dd; cin>>d_nacimiento.mm; cin>>d_nacimiento.aa;
cout<<"Ingrese la fecha de ingreso laboral :";
cin>>ingreso_laboral.dd; cin>>ingreso_laboral.mm; cin>>ingreso_laboral.aa;
cout<<"-------------------------------"<<endl;
D.Cargar_datos(nom_ape,dni,estado_civil,d_nacimiento);
D.Agregar_fecha_ingreso(ingreso_laboral);
break;
default: //Me da error...
cout<<"Salio del programa"<<endl;
break;
}
cout<<"El alumno con mejor promedio es: ";
Alumno aux=C.Mejor_promedio();
cout<<aux.Ver_nombre();
return 0;
}


al compilar me da este error:

Código (cpp) [Seleccionar]
error: jump to case label [-fpermissive]
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]

MAFUS

Sacando string nom_ape del switch me ha funcionado.

Cero++

Cita de: MAFUS en 23 Diciembre 2018, 23:35 PM
Sacando string nom_ape del switch me ha funcionado.

Si, extendiendo el error, dice que sacando el nom_ape, funcionaría, pero el tema es, que si lo saco, no cargaría el nombre del Docente jaja
Igual no entiendo que problema le puede ocasionar ese string al programa  :-(
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]

CalgaryCorpus

Define la(s) variable(s) fuera del switch o.bien
Define un bloque usando {} dentro del case donde vas a usar la(s) variable(s).
Aqui mi perfil en LinkedIn, invitame un cafe aqui

CalgaryCorpus

El problema está en que todo el switch es un gran bloque y cada case es un label y por tanto existen labels que al saltar a ellos, hay variables que se saltan sus inicializaciones, lo que no está permitido en C++.
Aqui mi perfil en LinkedIn, invitame un cafe aqui

Cero++

Cita de: CalgaryCorpus en 24 Diciembre 2018, 01:39 AM
Define la(s) variable(s) fuera del switch o.bien
Define un bloque usando {} dentro del case donde vas a usar la(s) variable(s).


Gracias por la ayuda  ;D
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]