Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problemas con el preprocesador

Iniciado por Yotes, 31 de Mayo de 2009, 05:55:37 AM

« anterior - próximo »

Yotes

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!


Yotes!

fjfnaranjo

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 ;) )
fjfnaranjo.com - Creating entertainment - Creando entretenimiento
fjfnaranjo [4t] gm4il [d0t] c0m (mail y msn)

Vicente

Hazte una clase pública con variables estáticas si necesitas "variables globales" ;)

Yotes

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!
Yotes!

fjfnaranjo

Lo ves, Vicente, hemos hecho un buen trabajo en equipo, ehem...

:.. Sobre ese concurso de diseño de videojuegos...
fjfnaranjo.com - Creating entertainment - Creando entretenimiento
fjfnaranjo [4t] gm4il [d0t] c0m (mail y msn)


Yotes

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!
Yotes!

davur

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!

Yotes

Wow.. eres una biblia :D.. jeje. Bueno, muchas gracias!  :-[
Yotes!

Yotes

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
Yotes!






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.