[C con Clase] Hay cosas que nunca entenderé...

Programante programante en gmail.com
Vie Oct 19 20:33:28 CEST 2007


Alejandro escribió:
> He tenido un probleme que me ha desconcertado. Estoy siguiend un buen manual de como crear videojuegos con SDL y, para empezar, hay que crear una aventura textual que te va describiendo donde estás, qué puedes hacer... en MS-DOS. El manual te da un patrón, pero yo he creado mi propia historia y he desarrollado el juego basándome en el del manual, pero  mi manera. El problema es el siguiente (os pongo sólo la parte del código que creo que influye, si eso me pedís el código entero, pero no me parece cuestión de colgar aquí las 400 líneas):
>
> #include <iostream> //Librería de cout, cin...
> #include <cstring>//Librería para strcpy...
> using namespace std;
>
> //Estructura para crear una zona del mapa
> struct Zonas
> {
>        char descripcion[300];//Descripcion de la zona
>        int norte, sur, este, oeste;//Lugar al que vas en estas direcciones
> }Zona[10];//Aray de diez zonas
>
> //Estructura para crear un objeto
> struct Objetos
> {
>        int estado;//Estado del objeto
>        char descripcion1[300];
>        char descripcion2[300];//Descripciones según el estado del objeto (1 ó 2)
>        int zona;//Zona en la que está
>        bool lotengo;//Determina si tienes o no el objeto
> }Objeto[9];//Array de ocho objetos
>
> ////////////FUNCIÓN MAIN///////////////
> int main(int arc, char **argv)
> {
>     ////------------------------CONSTANTES---------------------------------\\\\\\\\\\\\\\\\\
>     const int LINTERNA = 1;
>     const int PILAS = 2;
>     const int LLAVE = 3;
>     const int CUERDA = 4;
>     const int BALON = 5;
>     const int CARNE = 6;
>     const int CUCHILLO = 7;
>     const int LOBOS = 8;
>     const int NOBJETOS = 8;
>
> .......................................
>
> ////-------------------INICIALIZACIÓN DE OBJETOS Y ANIMALES-------------------\\\\\\\\\\\\\\\\
>     //Linterna
>     Objeto[LINTERNA].estado = 1;//AQUÍ ME DA EL PROBLEMA
>     strcpy(Objeto[LINTERNA].descripcion1, " Una linterna reposa sobre el centro, arrojando una tenue luz. Deben de estar a punto de acabarsele las pilas. Parece habersele caido a algun explorador.");
>     strcpy(Objeto[LINTERNA].descripcion2, " ");
>     Objeto[LINTERNA].zona = 5;
>     Objeto[LINTERNA].lotengo = false;
>
> .......................................
>
> Como el problema ya me lo dá ahí, no sigo poniendo código. Lo más curioso es el problema que dá: 
>
> In function: int main(int,char**)
>             'LINTERNA' undeclared (first use this function)
>
> ¡Dice que no declaré LINTERNA cuando lo hice antes! ¡Y está bien escrito en ambos casos! ¿A alguien se le ocurre qué puede pasar? Cosas como estas son las que no entiendo... puedo tener mil errores en el código, pero esto.... no lo esperaba. Alguna idea??
>
> Gracias por aguantar este correo tan largo y un saludo, Alejandro.
>   
¿Haces la inicialización en el main?
La variable LINTERNA sólo existe dentro del main.

Dos detalles respecto a lo que haces:
-No utilizas Objeto[0] (empiezas en el 1)
-En lugar de utilizar 8 constantes, una para cada valor, sería más 
apropiado usar un enum:
enum TiposObjetos {
LINTERNA=1, PILAS, LLAVE, CUERDA, BALON, CARNE, CUCHILLO, LOBOS};
Te hace el mismo servicio, es más simple, y te permite crear variables 
donde almacenas la clase de objeto.




Más información sobre la lista de distribución Cconclase