Foros - Stratos

Stratos => Principiantes => Mensaje iniciado por: Yotes en 31 de Mayo de 2009, 05:55:37 AM

Título: Problemas con el preprocesador
Publicado por: Yotes en 31 de Mayo de 2009, 05:55:37 AM
Hola que tal?

Les comento que hace un par de días empecé a introducirme al pequeño mundillo del C++ y hoy he tenido mi primer problema  ^_^'.

He estado revisando un poco la librería de indieLib y ya realicé todos los tutoriales exitosamente, así que me predispuse a hacer el pong :D.

El problema lo tuve cuando quice empezar a acomodar un poco las cosas. El tema es que tengo un archivo Main, que corre mi loop principal, pero obviamente necesito compartir algunas variables globales. Bueno, he aqui que quiero meter estas variables en una cabecera por ejemplo "globales.h", pero no estoy seguro si la cabecera debe tener si o si asociado un archivo "globales.cpp" y quizá ahí es donde meto la pata. Entonces, cuando uso un macro (al menos parece que asi los llaman) con los defines para que no lo meta dos veces el preprocesador.. resulta no funcionar, y por ende me quiere definir como 3 veces cada variable tirando el error correspondiente. De echo en las otras cabeceras funcionan correctamente los macros, pero en esta en particular no :(.

el codigo simplemente es:

#ifndef _MAIN_GLOBAL
#define _MAIN_GLOBAL
..
..
..
#endif //_MAIN_GLOBAL

dentro del macro probé con tiror un pragma message, y entra siempre. también probé con pragma once, pero no le da pelota.

Puede ser que en algun lado se esten borrando las definiciones del preprocesador??

Por otro lado, dado que soy nuevo en esto, me gustaría saber que técnicas usan para definir las variables globales y que queden vicibles para todos mis archivos .cpp

Bueno, tengan en cuenta que hace un par de dias que empecé con C++, asi que si hay alguna falencia de conceptos, por favor no me odien  :-[. Por ejemplo, vengo de java, y alli, cada .java refería a una clase (en la mayoría de los casos), pero yo veo que C++ me permite un poco mas de libertad para programar estructuradamente, y olvidarme al menos en lo que al los loops del juego refieren, de tener objetos para manejarlos. Entonces por ejemplo tengo un loop en el que updateo todo ,logica, posiciones, etc, dependiendo los estados del juego, y otro loop, con los mismos estados que lo uso para mostrar todo lo que es grafico ... al menos así me resulta comodo hacerlo.. es por eso que necesito tener mis variables globales, como por ejemplo currentGameState que indica el estado del juego.. me explico??:P

Acepto cualquier clase de critica respecto a este proceso, ya que sin duda alguna necesito mejorarlo :D:D.

Saludos!


Título: Re: Problemas con el preprocesador
Publicado por: fjfnaranjo en 31 de Mayo de 2009, 12:54:48 PM
No es común que algo te borre las directivas del procesador.

Pásanos todo el código porque con ese trocito no me hago una idea de que puede ser.

Y ya que estás, pero más adelante, cuando domines más C++, aprovecha que vienes de Java para programar aquí también de forma orientada a objetos. Así no tienes que usar globales, que son algo así como el "goto"  :P (osea, que no tenemos técnicas para usarlas, si no para evitarlas ;) )
Título: Re: Problemas con el preprocesador
Publicado por: Vicente en 31 de Mayo de 2009, 01:26:48 PM
Hazte una clase pública con variables estáticas si necesitas "variables globales" ;)
Título: Re: Problemas con el preprocesador
Publicado por: Yotes en 31 de Mayo de 2009, 06:45:55 PM
Ok, muchas gracias, ya probaré entonces con una clase que me gestione el loop principal y mantenga estas variables, algo como lo que hacia en java entonces :D. De esta manera seguiré los concejos de ambos :D. Muchas gracias!
Título: Re: Problemas con el preprocesador
Publicado por: fjfnaranjo en 31 de Mayo de 2009, 07:52:44 PM
Lo ves, Vicente, hemos hecho un buen trabajo en equipo, ehem...

:.. Sobre ese concurso de diseño de videojuegos...
Título: Re: Problemas con el preprocesador
Publicado por: Vicente en 31 de Mayo de 2009, 11:27:20 PM
Jajaja
Título: Re: Problemas con el preprocesador
Publicado por: Yotes en 01 de Junio de 2009, 04:56:35 PM
Si, ahora este gestor que comento sería mi singleton.

Es verdad lo de la planificación, pero en este caso al tratarse de un pong muy sencillo no documenté nada, solo me largue a hacerlo, dado que es para conocer un poco el lenguage.

saludos!
Título: Re: Problemas con el preprocesador
Publicado por: davur en 07 de Junio de 2009, 10:26:10 AM
Mal asunto si estás almacenando las variables de la lógica de tu juego de manera global.

Con respecto a #ifndef _MAIN_GLOBAL, ten en cuenta que utilizar nombres que comiencen por underscore seguido de mayúscula es comportamiento indefinido según el estándar (17.4.3.1.2/1):

Cita de: El estándar de C++
Certain sets of names and function signatures are always reserved to the implementation:

— Each name that contains a double underscore (_ _) or begins with an underscore followed by an uppercase letter (2.11) is reserved to the implementation for any use.

- Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace.

Es decir, ¡no lo hagas!
Título: Re: Problemas con el preprocesador
Publicado por: Yotes en 07 de Junio de 2009, 06:06:11 PM
Wow.. eres una biblia :D.. jeje. Bueno, muchas gracias!  :-[
Título: Re: Problemas con el preprocesador
Publicado por: Yotes en 07 de Junio de 2009, 06:11:32 PM
Respecto a lo de las variables globales, creo que viene de alguien que alguna vez me quiso enseñar C++, en realidad me quiso enseñar a programar y el tenía esta técnica, pero aprendí muy poco, porque en ese momento la verdad no me interesaba la programacion :S,.. parece que ahora, despues de tanto tiempo al volver a agarrarlo, lo primero que se me vino a la cabeza fue... variables globales, luego que me llamaron la atencion fjfnaranjo y vicente,.. me cayo la ficha :P