Título: Error al poner métodos de clase dentro de cabecera Publicado por: Kaxperday en 9 Julio 2015, 13:03 pm Hola de nuevo :xD :xD, tengo una clase definida en la cabecera, pero al poner sus métodos dentro de la cabecera (archivo ".h") me da error sin embargo al poner sus métodos en el ".cpp" no da error, ¿que solución puedo tomar?.
Código
Cuando pongo esto en "capturador.h" me sale el siguiente error: Citar Error 8 error LNK2005: ya se definió "public: void __thiscall lista_usuarios::insertar_host(unsigned char *,unsigned char *)" (?insertar_host@lista_usuarios@@QAEXPAE0@Z) en main.obj Ya os digo que simplemente al mover el método a el ".cpp" se corrige el error, pero ¿porque no me deja meterlo en la cabecera? No hay más definiciones que yo sepa XD Saludos y gracias como siempre. Edito_ Estoy en ello: https://support.microsoft.com/en-us/kb/148652/es Edito: Solucionado de rara manera ahora entiendo el error: http://www.cplusplus.com/forum/beginner/30800/ El último comentario lo explica, lo que hice fue meter el metodo en el cuerpo de la funcion y quitar su declaracion cambiandola por la del cuerpo del método: Código
Funciona, aunque no creo que sea el mejor método (pero al menos ya lo tengo en el ".h"). Saludos. Título: Re: Error al poner métodos de clase dentro de cabecera Publicado por: ivancea96 en 9 Julio 2015, 13:58 pm No, no es el mejor método. Ahora ese esa clase será compilada en cada archivo que la incluya.
Título: Re: Error al poner métodos de clase dentro de cabecera Publicado por: Kaxperday en 9 Julio 2015, 14:21 pm y entonces no hay alguna forma de meterlo en un archivo de cabecera (todo el contenido de la clase) sin que eso ocurra, o algún método más eficiente?.
Saludos. Título: Re: Error al poner métodos de clase dentro de cabecera Publicado por: ivancea96 en 9 Julio 2015, 15:03 pm El archivo de cabecera es pura información sobre la clase y sus métodos y campos. Esa es la teoría de cómo debería ser. Obviamente luego puedes hacer con ella lo que quieras.
Código: clase.h Una vez visto eso: Código: clase.h (como lo tienes tú, con las funciones desarrolladas) El problema de esto es que puede haber problemas si incluyes la cabecera multiples veces, en multiples archivos. Para hacer algo puntual, es factible, pero para hacer un proyecto importante, no. Título: Re: Error al poner métodos de clase dentro de cabecera Publicado por: Kaxperday en 9 Julio 2015, 18:52 pm Entonces quieres decir que lo mejor es ponerlo en el ".cpp", lo imaginaba pero no se me hace "bonito" verlo así. De todas formas lo tendré en cuenta para no hacerlo compilar más de una vez.
Saludos. Título: Re: Error al poner métodos de clase dentro de cabecera Publicado por: crack81 en 9 Julio 2015, 19:13 pm porque no pruebas las funciones inline pero aunque esto ultimas estan hechas para funcines pequeñas
te dejo algunos links: http://codigomaldito.blogspot.mx/2005/12/funciones-inline.html (http://codigomaldito.blogspot.mx/2005/12/funciones-inline.html) https://sites.google.com/site/jctovilla/programacion/c-c-para-linux-y-mac/funciones-inline-en-c-y-c-gnu (https://sites.google.com/site/jctovilla/programacion/c-c-para-linux-y-mac/funciones-inline-en-c-y-c-gnu) http://es.ccm.net/faq/2823-la-funcion-inline-en-c (http://es.ccm.net/faq/2823-la-funcion-inline-en-c) Título: Re: Error al poner métodos de clase dentro de cabecera Publicado por: Kaxperday en 9 Julio 2015, 20:57 pm Pues según esto ya lo estoy haciendo:
http://codigomaldito.blogspot.mx/2005/12/funciones-inline.html Código: //Clase con funciones INLINE Aunque como dice ivancea es mejor dejar sólo las declaraciones en la cabecera y las definiciones en el cpp. :P Saludos. |