Jump to content

[Duda C++]


NazoX

Recommended Posts

Bueno, pues tengo un pequeño problema, a la hora de implementar cosas con c++, por ejemplo, ahora trato de instalar el sistema ese que te permite cambiar los objetos de lado entre si, tal vez no me explique bien, pero si encuentro una foto la pongo, volviendo al tema, he visto que en todas las guías de c++ te ponen cosas como "despúes de tal pega esto, o haz esto otro y etc" hasta hay todo bien, el problema viene cuando me encuentro con esto :

#ifndef __blablablabla__
#else

 

Todas las guías que he visto tienen eso añadido, y no se si a la hora de la instalación se debe poner, he probado de ponerlo , sin ellos y aún así me da error al compilar, posiblemente me he dejado algo, pero mi duda es esa, si esas cosas se deben añadir. (#ifdef o #endif )

Por ejemplo, esto es lo que me pide :

// 1) Busca: bool CHARACTER::MoveItem(TItemPos Cell, TItemPos DestCell, BYTE count)
// 2) Busca esa función: if (!IsEmptyItemGrid(DestCell, item->GetSize(), Cell.cell))
// 3) Borra: return false;
// 4) Ahora pega: (no lo pongo x que ocupa medio post xd)

y yo lo tengo así: 

if (!IsEmptyItemGrid(DestCell, item->GetSize(), Cell.cell))  <------ la línea que debo buscar
#ifndef __SWAPITEM_SYSTEM__  <------------------------Aquí estaba el return false; pero se borra y hace el paso4
return false;
#else <---------tampoco se si se debe poner
{
if (Cell.IsEquipPosition() || DestCell.IsEquipPosition())
return false;  <----------- y todo esto es lo que tengo que pegar (es un fragmento.)

Quizás no se entendió bien así que pido perdón dejo una foto de mi archivo editado y de la guía.

6a903b22f459a3ad701d0e8b2988950f.png

ca0bb00bdc1236972ecd637cc9f321ce.png

ca0bb00bdc1236972ecd637cc9f321ce.png

---La de abajo es la mía con eso eso añadido---------------------------

ca0bb00bdc1236972ecd637cc9f321ce.png

Pues como se ve en la imagen no se si se debe añadir los #ifndef y los #else 

Ojo no pido que me hagáis el sistema, es que ya he probado de todo, y soy muy nuevo en source, me gustaría saber por donde guiarme, gracias de antemano.

Link to comment
Share on other sites

Tienes que cerrar el #ifdef con #endif

 

#ifdef VAR

 

si esta definido VAR

 

#else

 

si no esta definido VAR

 

#endif

 

///////////////

 

#ifndef VAR

 

si no esta definido VAR

 

#endif

Valep muchas gracias  lo probaré a ver si por fin me funciona ^^

Link to comment
Share on other sites

El "ifdef/else/endif/" son definiciones directivas que se utilizan para controlar el código, al colocar un "ifdef NOMBREDEFINICIÓN" en algún archivo del servidor, lo más seguro es que deba ser agregado a "service.h" como un "define NOMBREDEFINICIÓN".

 

Esto sirve fundamentalmente por si vas a colocar un sistema y el día de mañana deseas deshabilitarlo, simplemente deberás quitar del "service.h" el "define NOMBREDEFINICIÓN" siempre y cuando cumpla con ciertas medidas.

 

Ejemplo,

 

#ifdef DROP_TIME

pkItemToDrop->StartDestroyEvent(30); -Si está en service.h borrará los objetos en 30 segundos.

#else

pkItemToDrop->StartDestroyEvent(5); -Si no está en service.h borrará los objetos en 5 segundos.

#endif

 

Pero si en dado caso, en vez de poner el else, pusieras simplemente el ifdef y endif y quitaras la linea del service.h, esto ocasionaría problemas en la compilación.

 

Ejemplo,

 

#ifdef DROP_TIME -Si el define DROP_TIME no esta en service.h la compilación tendría fallos debido a que el juego no reconoce esta linea.

pkItemToDrop->StartDestroyEvent(30); -Si está en service.h borrará los objetos en 30 segundos.

#endif

 

En respuesta al error que tienes, te aconsejo no eliminar las directivas, pero sin embargo, echar un ojo más detallado a como funcionan.

Link to comment
Share on other sites

 

#ifdef DROP_TIME -Si el define DROP_TIME no esta en service.h la compilación tendría fallos debido a que el juego no reconoce esta linea.

pkItemToDrop->StartDestroyEvent(30); -Si está en service.h borrará los objetos en 30 segundos.

#endif

 

 

Sabes que el único propósito del archivo service.h es ese? Que si no se definen las variables ese ifdef lo salta?

No da ningún error de compilación si no esta en service.h ...

 

Igual ni siquiera tiene que estar en service.h, se pone ahí para que este todo mas organizado y saber cuales tienes activas

Link to comment
Share on other sites

El "ifdef/else/endif/" son definiciones directivas que se utilizan para controlar el código, al colocar un "ifdef NOMBREDEFINICIÓN" en algún archivo del servidor, lo más seguro es que deba ser agregado a "service.h" como un "define NOMBREDEFINICIÓN".

 

Esto sirve fundamentalmente por si vas a colocar un sistema y el día de mañana deseas deshabilitarlo, simplemente deberás quitar del "service.h" el "define NOMBREDEFINICIÓN" siempre y cuando cumpla con ciertas medidas.

 

Ejemplo,

 

#ifdef DROP_TIME

pkItemToDrop->StartDestroyEvent(30); -Si está en service.h borrará los objetos en 30 segundos.

#else

pkItemToDrop->StartDestroyEvent(5); -Si no está en service.h borrará los objetos en 5 segundos.

#endif

 

Pero si en dado caso, en vez de poner el else, pusieras simplemente el ifdef y endif y quitaras la linea del service.h, esto ocasionaría problemas en la compilación.

 

Ejemplo,

 

#ifdef DROP_TIME -Si el define DROP_TIME no esta en service.h la compilación tendría fallos debido a que el juego no reconoce esta linea.

pkItemToDrop->StartDestroyEvent(30); -Si está en service.h borrará los objetos en 30 segundos.

#endif

 

En respuesta al error que tienes, te aconsejo no eliminar las directivas, pero sin embargo, echar un ojo más detallado a como funcionan.

 

Sabes que el único propósito del archivo service.h es ese? Que si no se definen las variables ese ifdef lo salta?

No da ningún error de compilación si no esta en service.h ...

 

Igual ni siquiera tiene que estar en service.h, se pone ahí para que este todo mas organizado y saber cuales tienes activas

Gracias a los 2, mas o menos creo que lo entiendo, y no si ara falta como dice dragón, pero en service.h tengo

#ifdef __ATTR_TRANSFER_SYSTEM__ o algo así no estoy en el pc ahora no me acuerdo del nombre, sobre lo demás parece que esta compilando sin errores, basandome en lo que dijo dragón y tú sobre los #indef y los #else gracias chicos.

Link to comment
Share on other sites

Sabes que el único propósito del archivo service.h es ese? Que si no se definen las variables ese ifdef lo salta?

No da ningún error de compilación si no esta en service.h ...

 

Igual ni siquiera tiene que estar en service.h, se pone ahí para que este todo mas organizado y saber cuales tienes activas

Si leyeras un poco entenderías lo que dije.

 

Si el "ifdef DROP_ITEM" con el "endif" no está, hace falta la linea "pkItemToDrop->StartDestroyEvent(30);" en esa parte.

 

Por lo que, si hace falta una linea tan fundamental como la es la del drop, OBVIAMENTE VA A DAR ERROR DE COMPILACIÓN.

 

No lo sé dragón, a ver si leemos mejor.

Link to comment
Share on other sites

Si leyeras un poco entenderías lo que dije.

 

Si el "ifdef DROP_ITEM" con el "endif" no está, hace falta la linea "pkItemToDrop->StartDestroyEvent(30);" en esa parte.

 

Por lo que, si hace falta una linea tan fundamental como la es la del drop, OBVIAMENTE VA A DAR ERROR DE COMPILACIÓN.

 

No lo sé dragón, a ver si leemos mejor.

No da error ninguno de compilación pero bueno tu a tu rollo.

 

Lo mejor que puedes hacer cuando no tienes ni puta idea es no hablar.

Link to comment
Share on other sites

No da error ninguno de compilación pero bueno tu a tu rollo.

 

Lo mejor que puedes hacer cuando no tienes ni puta idea es no hablar.

Siempre creyéndote el mejor cariño.

 

Te lo voy a explicar con plastilina, ya que tu cabeza no es capaz de comprenderlo.

 

1.- Borramos "define DROP_ITEM" de "service.h".

 

2.- Compilamos el game.

 

¿Qué recibiremos?, ERROR DE COMPILACIÓN, ¿La razón?, no se encontró la linea " pkItemToDrop->StartDestroyEvent(30);" debido a que se eliminó el "define DROP_ITEM" el cual activa la directiva #ifdef DROP_ITEM que contenía dicha linea.

 

En otras palabras, al eliminar el define del service.h, es como si dijéramos que NO EXISTE DICHA LINEA EN CHAR_ITEM.CPP porque NO ESTA ACTIVO EL #ifdef

 

¿Comprendes?, ¿O tu mente no es capaz de procesarlo?

 

Lo mismo digo amiguito, lo mejor que puedes hacer cuando no tienes ni puta idea es no hablar.

Link to comment
Share on other sites

Cada vez que hablas sube el pan.

 

No tienes ni puta idea de programación basica.

Porque lo que estas diciendo es ridiculo.

 

Porque va a necesitar el compilador esta linea?

 

 pkItemToDrop->StartDestroyEvent(30);

 

PD: Porque no lo pruebas si estas tan seguro? =P

Puede que te lleves una sorpresa

 

PD2: Yo mismo te he dicho que esa linea se la salta "Sabes que el único propósito del archivo service.h es ese? Que si no se definen las variables ese ifdef lo salta?"

Link to comment
Share on other sites

Siempre creyéndote el mejor cariño.

 

Te lo voy a explicar con plastilina, ya que tu cabeza no es capaz de comprenderlo.

 

1.- Borramos "define DROP_ITEM" de "service.h".

 

2.- Compilamos el game.

 

¿Qué recibiremos?, ERROR DE COMPILACIÓN, ¿La razón?, no se encontró la linea " pkItemToDrop->StartDestroyEvent(30);" debido a que se eliminó el "define DROP_ITEM" el cual activa la directiva #ifdef DROP_ITEM que contenía dicha linea.

 

En otras palabras, al eliminar el define del service.h, es como si dijéramos que NO EXISTE DICHA LINEA EN CHAR_ITEM.CPP porque NO ESTA ACTIVO EL #ifdef

 

¿Comprendes?, ¿O tu mente no es capaz de procesarlo?

 

Lo mismo digo amiguito, lo mejor que puedes hacer cuando no tienes ni puta idea es no hablar.

 

Tu estás llamando a una función del pkItemToDrop, que en este caso seria un LPITEM, como mucho daría error si faltase la declaración de pkItemToDrop.

Link to comment
Share on other sites

Tu estás llamando a una función del pkItemToDrop, que en este caso seria un LPITEM, como mucho daría error si faltase la declaración de pkItemToDrop.

Tienes razón, simplemente cogí el primer "#ifdef" que vi en char_item.cpp para tomarlo como ejemplo.

 

En dado caso, daría error suponiendo que fuera una declaración como puede ser la del lycan

 

#ifdef ENABLE_WOLFMAN_CHARACTER
MAIN_RACE_WOLFMAN_M,
#endif
Link to comment
Share on other sites

 

Tienes razón, simplemente cogí el primer "#ifdef" que vi en char_item.cpp para tomarlo como ejemplo.

 

En dado caso, daría error suponiendo que fuera una declaración como puede ser la del lycan

 

#ifdef ENABLE_WOLFMAN_CHARACTER
MAIN_RACE_WOLFMAN_M,
#endif

 

Me ha funcionado todo correctamente lo que me habéis mencionado, y el sistema va de lujo, pero mira he tratado de poner esto, y me da error :

6b2f965b78301677bf6cbb7c1ac5d8d0.png

debería ser #infdef o #ifdef ?

edit: debería terminar en #else como dijo dragón ya que supongo que no tiene  VAR cierto?

Link to comment
Share on other sites

#ifndef comprueba la no definición de un identificador

 

#ifdef es lo contrario, comprueba la definición de un identificador.

 

En ese error, el problema no viene siendo la definición _KINGDOMS_WAR_ si no la condición "if" de la linea 1599

gracias mañana lo miro
Link to comment
Share on other sites

  • Dilong locked this topic
Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...