<div dir="ltr">Hola Sara,<div class="gmail_extra"><br><div class="gmail_quote">2013/1/28 Sara Castilla Guilllén <span dir="ltr"><<a href="mailto:saricg@hotmail.es" target="_blank">saricg@hotmail.es</a>></span><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">



<div><div dir="ltr">
HOLA, MAÑANA TENGO QUE ENTREGAR UNA PRÁCTICA Y LA VERDAD QUE ME ESTOY VOLVIENDO LOCA PUES NO CONSIGO SOLUCIONAR LOS PROBLEMAS DE COMPILACIÓN. <br></div></div></blockquote><div><br></div><div style>Veamos el código fuente y todos los errores que hay:<br>
<br>* enum peliculas { ElHobbit, ¡RompeRalph!, ElCuerpo, ElAlucinanteMundoDeNorman, LoImposible };<br></div><div style><br></div><div style>El error está en: ¡RompeRalph!  Recuerda que estás definiendo constantes para C++. Los nombres o identificadores sólo pueden contener letras (mayúsculas o minúsculas), dígitos, y el subrayado (_); además, el primer carácter no puede ser un dígito.</div>
<div style><br></div><div style>Por lo tanto, simplemente elimina las exclamaciones para este nombre; o sea, escribe:<br><br></div><div style>enum peliculas { ElHobbit, RompeRalph, ElCuerpo, ElAlucinanteMundoDeNorman, LoImposible };<br>
</div><div style><br></div><div>* struct TpHorario{</div><div><span class="" style="white-space:pre">       </span>salas numero_sala;</div><div><span class="" style="white-space:pre"> </span>hora hora_sesion;</div><div><span class="" style="white-space:pre">  </span>peliculas peli</div>
<div>}horario;<br></div><div><br></div><div style>Necesitas el punto y coma al final de la declaración de 'peli'; es decir,</div><div><br></div><div><div>struct TpHorario{</div><div><span class="" style="white-space:pre">       </span>salas numero_sala;</div>
<div><span class="" style="white-space:pre">    </span>hora hora_sesion;</div><div><span class="" style="white-space:pre">  </span>peliculas peli;</div><div>}horario;<br></div></div><div><br></div><div>* bool SalirDelPrograma(salir);</div>
<div><br></div><div style>No has definido 'salir', que debería ser un tipo de dato, ya que esta sentencia intenta declarar una función: su prototipo. Como realmente no necesita un valor (entrante), puedes obviarlo.</div>
<div style><br></div><div style>Al final, puedes escribir:</div><div><br></div><div>bool SalirDelPrograma();</div><div><br></div><div><br></div><div>* En 'main()':<br><br>** case 0: cartelera = LeerPelicula();</div>
<div><br></div><div style>El error está en que no pasas un parámetro a esta función. El prototipo de 'LeerPelicula()' es:<br><br></div><div style>void LeerPelicula( const TpInfopeli &informacion );<br></div><div>
<br></div><div style>El otro error es que intentas asignar el valor retornado de 'LeerPelicula()' a la variable 'cartelera'. Sin embargo, viendo el prototipo, esta función no retorna ningún valor (void).</div>
<div style><br></div><div style>Por lo tanto, o bien cambias el prototipo 'LeerPelicula()' y obviamente su definición para que retorne un valor de tipo 'TpCines', o bien no haces esta asignación.</div><div>
<br></div><div>** case 1: VisualizarInformacion( cartelera );</div><div><br></div><div style>Pasas la variable incorrecta, ya que esta función requiere un valor de tipo 'TpInfopeli', como indica su prototipo:<br><br>
void VisualizarInformacion( const TpInfopeli &informacion );<br></div><div><br></div><div style>Esto sugiere que deberías pasar 'informacion'; esto es,</div><div><br></div><div>case 1: VisualizarInformacion( informacion );</div>
<div><br></div><div style>** case 1: //VisualizarInformacion</div><div style><br></div><div style>Duplicas el caso de 1. Simplemente, elimina esta sentencia.<br></div><div style><br></div><div style>** cin >> pelicula;</div>
<div style>BuscarPelicula( cartelera, pelicula, encontrado, informacion );<br></div><div style><br></div><div style>No has definido 'pelicula'. Sospecho que querías usar 'nombre'; esto sería,<br><br></div>
<div style>cin >> nombre;<br></div><div>BuscarPelicula( cartelera, nombre, encontrado, informacion );<br></div><div><br></div><div>** case 3: ListarPeliculas( informacion.pelicula );</div><div><br></div><div style>Según el prototipo, esta función requiere un valor de tipo 'TpInfopeli'. Supongo que quieres hacer esto:</div>
<div><br></div><div>case 3: ListarPeliculas( informacion );</div><div><br></div><div>** SalirDelPrograma( salir );</div><div><br></div><div style>No defines 'salir', pero como dije antes, seguramente no necesites pasar ningún parámetro, así que invoca esta función así:</div>
<div><br></div><div>SalirDelPrograma();</div><div><br></div><div><br></div><div>* En 'LeerPelicula()':<br><br></div><div>** cin >> informacion.nombre_cine;</div><div>    ...</div><div><br></div><div style>cin >> intentará modificar el objeto que indiques. Sin embargo, esta función acepta un objeto constante; escribes:<br>
<br>void LeerPelicula( const TpInfopeli &informacion );<br></div><div style><br></div><div style>No podemos modificar algo que es constante.</div><div style><br></div><div style>Sugiero eliminar 'const' del tipo del parámetro tanto en el prototipo como en esta definición.</div>
<div style><br></div><div style><br></div><div style>El otro problema es que algunos campos en 'informacion' son de tipo enumerado. En la reciente revisión del estándar de C++, no podemos convertir tipos enumerados implícitamente a enteros.</div>
<div style><br></div><div style>De todas maneras, no deberías usar tipos enumerados para lo que necesitas, sino cadenas de caracteres - de tipo 'string', por ejemplo.</div><div style><br></div><div style>** return informacion;<br>
</div><div style><br></div><div style>No tiene sentido retornar algo, cuando dijiste que esta función no retorna un valor, porque indicaste 'void' para el tipo de retorno.</div><div><br></div><div><br></div><div style>
* En 'InsertarPelicula()':</div><div style><br></div><div style>** void InsertarPelicula(TpCines &cartelera, const TpInfopeli &informacion);{<br></div><div style><br></div><div style>Has colocado el punto y coma al final de la firma de esta función, creando un prototipo, pero te interesa definir la función. Por lo tanto, elimina este punto y coma.</div>
<div style><br></div><div style>** if (Buscar(cartelera,informacion.nombre_cine.pelicula.protagonistas.calificacion_edades) == -1){</div><div style><br></div><div style>No definiste la función 'Buscar()', por lo que me imagino que querías decir, 'BuscarPelicula()'.</div>
<div><br></div><div style>Sin embargo, no pasas la información correcta a esta función.</div><div style><br></div><div style>** while(i < MAX_CINES && cartelera[i].ocupada) // Buscar hueco</div><div>      i++;</div>
<div>    if (i < MAX_CINES){</div><div>      cartelera[i].informacion = info;</div><div>      cartelera[i].ocupada = true;</div><div>    }</div><div><br></div><div style>El error está en el uso de 'cartelera[i]'. Accedes a campos que no existen en este objeto.</div>
<div><br></div><div><br></div><div style>* En 'VisualizarInformacion()':</div><div><br></div><div>** if (informacion[i].ocupada)</div><div>      LeerPelicula(informacion[i].nombre_cine.pelicula.protagonistas.calificacion_edades);</div>
<div><br></div><div style>Usas 'informacion' como un array, pero no se define como tal.</div><div style><br></div><div style>Además, pasas información incorrecta a 'LeerPelicula()'.</div><div style><br></div>
<div style><br></div><div style>* En 'BuscarPelicula()':</div><div style><br></div><div style>** if (cartelera[i].ocupada && cartelera[i].informacion.pelicula == pelicula)</div><div>      encontrado = true;</div>
<div>...</div><div><div>if (encontrado){</div><div>    informacion = cartelera[i].informacion;</div></div><div><br></div><div style>'cartelera[i]' no tiene estos campos.</div><div style><br></div><div style><br></div>
<div style>* En 'ListarPeliculas()':</div><div style><br></div><div style>** if (cartelera[i].ocupada)</div><div><span class="" style="white-space:pre">      </span>EscribirPelicula(cartelera[i].informacion);</div><div>
<br></div><div style>Aquí tienes el mismo error anterior: 'cartelera[i]' no tiene definido estos campos.</div><div style><br></div><div style>** EscribirPelicula(cartelera[i].informacion);</div><div style><br></div>
<div style>No has definido la función 'EscribirPelicula()'</div><div><br></div><div><br></div><div style>* En 'SalirDelPrograma()':</div><div style><br></div><div style>** bool SalirDelPrograma(salir){</div>
<div style><br></div><div style>Elimina este parámetro que no necesitas.</div><div style><br></div><div style>** if (salir = S){</div><div style><br></div><div style>Recuerda que el operador =  es de asignación. Aquí te interesa el operador de comparación de igualación ==. Esto es,</div>
<div style><br></div><div style><div>if (salir == S)</div></div><div style><br></div><div style>Sin embargo, debes definir correctamente 'salir'. Sospecho que debería ser un carácter; por ejemplo,</div><div style>
<br></div><div style>char salir;</div><div style><br></div><div style>cin >> salir;</div><div style><br></div><div style>if( salir == 'S' )</div><div style><br></div><div style>Aunque también podría ser una cadena de caracteres; por ejemplo,</div>
<div style><br></div><div style>string salir;</div><div style>...</div><div style><div>if( salir == "S" )</div></div><div style><br></div><div style>** if (salir = S){</div><div><span class="" style="white-space:pre">             </span>salir = true;</div>
<div><span class="" style="white-space:pre">    </span>}else salir = false;</div><div><br></div><div style>El objeto 'salir' no puede ser un carácter (o cadena) y también booleano. En C++, las entidades definidas NO pueden adoptar nuevos tipos de datos: si declaras que 'salir' es un carácter, no puede ser un booleano; ni viceversa.</div>
<div style><br></div><div style>De todas maneras, lo que te interesa es retornar la veracidad, por lo que necesitas una sentencia 'return'. Esto sería:<br><br>if( salir == 'S' )<br></div><div style>  return true;</div>
<div style>else</div><div style><div>  return false;</div><div><br></div><div style>Sin embargo, esto complica las cosas demasiado y aconsejo hacer esto, en su lugar:<br><br>return salir == 'S';</div><div style><br>
</div><div style><br></div><div style>Bueno, Salvador se me ha adelantado, pero tiene razón. Necesitas usar cadenas de caracteres y no tipos enumerados, para permitir al usuario introducir los datos, para que tu programa los guarde y los pueda manipular.</div>
</div><div><br></div><div><br></div><div style>Espero que todo esto te oriente.</div><div><br></div><div style>Steven</div><div style><br></div></div></div></div>