Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Cero++ en 23 Diciembre 2018, 22:31 pm



Título: No entiendo este error - Ayuda
Publicado por: Cero++ en 23 Diciembre 2018, 22:31 pm
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
  1. #include <iostream>
  2. using namespace std;
  3. using namespace std;
  4. struct Fecha{
  5. int dd,mm,aa;
  6. };
  7. /*
  8. Estado civil:
  9. -1"soltero"
  10. 0 "casado"
  11. 1 "viudo"
  12. */
  13. class Persona{
  14. string nom_ape; int DNI, estado_civil; Fecha fecha_nacimiento;
  15. public:
  16. void Cargar_datos(string _nom, int _dni, int _civil, Fecha _d_nacimiento);
  17. int Edad(Fecha _actual){ //retorno la edad;
  18. int aux=_actual.aa-fecha_nacimiento.aa;
  19. return aux;
  20. }
  21. string Ver_nombre(){
  22. return nom_ape;
  23. }
  24. };
  25. void Persona:: Cargar_datos(string _nom, int _dni, int _civil, Fecha _d_nacimiento){
  26. nom_ape=_nom; DNI=_dni; estado_civil=_civil; fecha_nacimiento=_d_nacimiento;
  27. }
  28.  
  29. class Alumno: public Persona{
  30. float promedio; int cantidad_aprovadas;
  31. public:
  32. void Agregar_prom(float _prom){
  33. promedio=_prom;
  34. }
  35. void Materias_apro(int _apro){
  36. cantidad_aprovadas=_apro;
  37. }
  38. float Ver_promedio(){
  39. return promedio;
  40. }
  41. float Merito_academico(){
  42. float aux=promedio*cantidad_aprovadas;
  43. return aux;
  44. }
  45. };
  46.  
  47. class Docente:public Persona{
  48. Fecha ingreso;
  49. public:
  50. void Agregar_fecha_ingreso(Fecha _f){
  51. ingreso=_f;
  52. }
  53. int Antiguedad(Fecha _actual){
  54. int aux=ingreso.aa-_actual.aa;
  55. return aux;
  56. }
  57. };
  58.  
  59. class Curso{
  60. string nombre_curso; Docente D; Alumno *A=nullptr; int size;
  61. public:
  62. Curso(int _i){
  63. if(_i<=50){
  64. size=_i;
  65. A=new Alumno [size];
  66. }else{
  67. cerr<<"Supero el limite maximo de alumnos (50)"<<endl;
  68. exit(1);
  69. }
  70.  
  71. }
  72. void Agregar_docente(Docente _d){
  73. D=_d;
  74. }
  75. void Agregar_alumno(Alumno _a, int _i){
  76. A[_i]=_a;
  77. }
  78. void Nom_d_curso(string _nom){
  79. nombre_curso=_nom;
  80. }
  81. Alumno Mejor_promedio();
  82. };
  83. Alumno Curso::Mejor_promedio(){
  84. Alumno aux=A[0];
  85. for(int i=1;i<size;i++) {
  86. if(aux.Ver_promedio()<A[i].Ver_promedio()){
  87. aux=A[i];
  88. }
  89. }
  90. return aux;
  91. }
  92. int main(int argc, char *argv[]) {
  93. int size; Alumno A; Docente D;
  94. cout<<"Ingrese la cantidad de alumnos en el curso: "; cin>>size;
  95. Curso C(size);
  96. cout<<"Seleccione la opcion para proceder :";
  97. cout<<"1 -> Agregar alumnos"<<endl;
  98. cout<<"2 -> Agregar Docente a cargo"<<endl;
  99. cout<<"Presione cualquier numero para salir del programa"<<endl;
  100. int caso; cin>>caso;
  101. switch(caso){
  102. case 1:
  103. cout<<"Ahora ingrese los datos de los alumnos:"<<endl;
  104. for(int i=0;i<size;i++) {
  105. string nom_ape; int dni,estado_civil,materias_apro; Fecha d_nacimiento;
  106. float promedio;
  107. cout<<"Ingrese el nombre y apellido: "; cin>>nom_ape;
  108. cout<<"Ingrese el DNI: "; cin>>dni;
  109. cout<<"Ingrese el estado civil: "; cin>>estado_civil;
  110. cout<<"Ingrese la fecha de nacimiento :";
  111. cin>>d_nacimiento.dd; cin>>d_nacimiento.mm; cin>>d_nacimiento.aa;
  112. cout<<"Ingrese el promedio del alumno :"; cin>>promedio;
  113. cout<<"Ingrese la cantidad de materias aprovadas: "; cin>>materias_apro;
  114. cout<<"-----------------------------"<<endl;
  115. A.Cargar_datos(nom_ape,dni,estado_civil,d_nacimiento);
  116. A.Materias_apro(materias_apro);
  117. A.Agregar_prom(promedio);
  118. C.Agregar_alumno(A,i);
  119. }
  120. break;
  121. case 2:
  122. cout<<"Ingrese los datos del Docente"<<endl;
  123. string nom_ape; int dni,estado_civil;
  124. Fecha d_nacimiento, ingreso_laboral;
  125. cout<<"Ingrese el nombre y apellido: "; cin>>nom_ape;
  126. cout<<"Ingrese el DNI: "; cin>>dni;
  127. cout<<"Ingrese el estado civil: "; cin>>estado_civil;
  128. cout<<"Ingrese la fecha de nacimiento :";
  129. cin>>d_nacimiento.dd; cin>>d_nacimiento.mm; cin>>d_nacimiento.aa;
  130. cout<<"Ingrese la fecha de ingreso laboral :";
  131. cin>>ingreso_laboral.dd; cin>>ingreso_laboral.mm; cin>>ingreso_laboral.aa;
  132. cout<<"-------------------------------"<<endl;
  133. D.Cargar_datos(nom_ape,dni,estado_civil,d_nacimiento);
  134. D.Agregar_fecha_ingreso(ingreso_laboral);
  135. break;
  136. default: //Me da error...
  137. cout<<"Salio del programa"<<endl;
  138. break;
  139. }
  140. cout<<"El alumno con mejor promedio es: ";
  141. Alumno aux=C.Mejor_promedio();
  142. cout<<aux.Ver_nombre();
  143. return 0;
  144. }

al compilar me da este error:

Código
  1. error: jump to case label [-fpermissive]


Título: Re: No entiendo este error - Ayuda
Publicado por: MAFUS en 23 Diciembre 2018, 23:35 pm
Sacando string nom_ape del switch me ha funcionado.


Título: Re: No entiendo este error - Ayuda
Publicado por: Cero++ en 23 Diciembre 2018, 23:54 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  :-(


Título: Re: No entiendo este error - Ayuda
Publicado por: 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).


Título: Re: No entiendo este error - Ayuda
Publicado por: CalgaryCorpus en 24 Diciembre 2018, 01:47 am
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++.


Título: Re: No entiendo este error - Ayuda
Publicado por: Cero++ en 24 Diciembre 2018, 16:54 pm
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