NazoX Posted May 31, 2017 Report Share Posted May 31, 2017 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 paso4return 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. ---La de abajo es la mía con eso eso añadido--------------------------- 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 More sharing options...
Dragonslayer Posted May 31, 2017 Report Share Posted May 31, 2017 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 NazoX 1 Link to comment Share on other sites More sharing options...
NazoX Posted May 31, 2017 Author Report Share Posted May 31, 2017 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 More sharing options...
Akinox Posted May 31, 2017 Report Share Posted May 31, 2017 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. NazoX 1 Link to comment Share on other sites More sharing options...
Dragonslayer Posted May 31, 2017 Report Share Posted May 31, 2017 #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 NazoX 1 Link to comment Share on other sites More sharing options...
NazoX Posted May 31, 2017 Author Report Share Posted May 31, 2017 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 More sharing options...
Akinox Posted May 31, 2017 Report Share Posted May 31, 2017 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 More sharing options...
Dragonslayer Posted May 31, 2017 Report Share Posted May 31, 2017 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 More sharing options...
Akinox Posted May 31, 2017 Report Share Posted May 31, 2017 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 More sharing options...
Dragonslayer Posted May 31, 2017 Report Share Posted May 31, 2017 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 More sharing options...
Shang Posted May 31, 2017 Report Share Posted May 31, 2017 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 More sharing options...
Akinox Posted May 31, 2017 Report Share Posted May 31, 2017 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 NazoX 1 Link to comment Share on other sites More sharing options...
NazoX Posted May 31, 2017 Author Report Share Posted May 31, 2017 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 : 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 More sharing options...
NazoX Posted June 1, 2017 Author Report Share Posted June 1, 2017 #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 More sharing options...
Recommended Posts