Título: No puedo declarar la variable por ser un tipo abstracto Publicado por: Borito30 en 1 Marzo 2017, 04:17 am Estoy creando una clase basada en la libreria gloox pero cuando creo un miembro de mi clase me devuelve el siguiente error:
Código: error: cannot declare variable 'b' to be of abstract type 'Bot'| Código: #include "gloox/src/client.h" Título: Re: No puedo declarar la variable por ser un tipo abstracto Publicado por: ivancea96 en 1 Marzo 2017, 12:48 pm No conozco la librería pero dado que la clase hereda de esas otras clases, será que hay miembros que no has definido. Por ejemplo, virtual bool onTLSConnect(const CertInfo& Info), que lo tienes comentado. Quizás sea una función virtual pura.
EDITO: Quizás no. Es una función virtual pura, según lo que vi en la referencia de la librería. https://camaya.net/api/gloox/classgloox_1_1ConnectionListener.html (https://camaya.net/api/gloox/classgloox_1_1ConnectionListener.html) Título: Re: No puedo declarar la variable por ser un tipo abstracto Publicado por: Borito30 en 1 Marzo 2017, 12:50 pm No conozco la librería pero dado que la clase hereda de esas otras clases, será que hay miembros que no has definido. Por ejemplo, virtual bool onTLSConnect(const CertInfo& Info), que lo tienes comentado. Quizás sea una función virtual pura. tengo que incluir openssl para poder usarlo pero hasta tiempo que no lo hago y nunca lo he hecho en codeblocks como podría incluir las librerías openssl para solucionar este error en codeblocks?Título: Re: No puedo declarar la variable por ser un tipo abstracto Publicado por: ivancea96 en 1 Marzo 2017, 13:39 pm Primero, descargala. Si laquieres ya compilada, puedes probar desde auí: https://wiki.openssl.org/index.php/Binaries (https://wiki.openssl.org/index.php/Binaries)
Luego, toca poner las opciones de Code::Blocks. Te pongo como lo tengo yo para que te orientes: (http://i.gyazo.com/5b382797757556469ffb97098634bbb4.png) (http://i.gyazo.com/36d37ffb6e5663226a06157f03ff4af8.png) (http://i.gyazo.com/e1d86399c10a12e67dc51fad162d8e8e.png) Título: Re: No puedo declarar la variable por ser un tipo abstracto Publicado por: Borito30 en 12 Marzo 2017, 16:16 pm Una pregunta ya puedo usar openssl pero porque cuando el siguiente ejemplo pongo una cabecera de openssl ej:
Código: #include <iostream> Código: #include <aes.h> Código: ||=== Build: Debug in main (compiler: GNU GCC Compiler) ===| Título: Re: No puedo declarar la variable por ser un tipo abstracto Publicado por: ivancea96 en 12 Marzo 2017, 16:33 pm El error es auto-explicativo. Esa cabecera tiene un include dentro que parece no existir.
Mira el código de la cabecera, mira e include, y mira si existe. Si existe, tal vez hayas puesto algo mal en la configuración del IDE al compilar. Aunque bueno, alerta spoiler: Probablemente pusiste que el directorio de los includes es "include/openssl". Eso es incorrecto. El directorio de los include es "include", sin más. Para incluir cabeceras de OpenSSL, tienes que poner "#include <openssl/...>". Por ejemplo, #include <openssl/aes.h> Si ves el código de la cabecera del error, verás que tiene un: #include <openssl/opensslconf.h> Título: Re: No puedo declarar la variable por ser un tipo abstracto Publicado por: Borito30 en 12 Marzo 2017, 16:46 pm Este es el error que me aparece en mingw:
Código: ||=== Build: Debug in main (compiler: GNU GCC Compiler) ===| Título: Re: No puedo declarar la variable por ser un tipo abstracto Publicado por: ivancea96 en 12 Marzo 2017, 17:28 pm En VS, click derecho en el proyecto, propiedades.
Ahí tienes, dentor de "Configuration properties", la pestaña "C/C++ -> General". Dentro de esta, Additional include directories. Luego, para el linker, si el proyecto se va a linkear, debajo de "C/C++", tienes "Linker". Ene sta, teines "General" también. Ahí, "Additional library dependencies". Luego, en "Linker -> Input", tienes "Additional dependencies". Título: Re: No puedo declarar la variable por ser un tipo abstracto Publicado por: Borito30 en 12 Marzo 2017, 17:35 pm El error es auto-explicativo. Esa cabecera tiene un include dentro que parece no existir. Mira el código de la cabecera, mira e include, y mira si existe. Si existe, tal vez hayas puesto algo mal en la configuración del IDE al compilar. Aunque bueno, alerta spoiler: Probablemente pusiste que el directorio de los includes es "include/openssl". Eso es incorrecto. El directorio de los include es "include", sin más. Para incluir cabeceras de OpenSSL, tienes que poner "#include <openssl/...>". Por ejemplo, #include <openssl/aes.h> Si ves el código de la cabecera del error, verás que tiene un: #include <openssl/opensslconf.h> Pero si esque te fijas yo tengo las cabeceras dentro del directorio openssl que esta dentro del directorio include por eso puse esa ruta o estaría mal? Gracias! Título: Re: No puedo declarar la variable por ser un tipo abstracto Publicado por: ivancea96 en 12 Marzo 2017, 17:39 pm En directorio de includes, debes poner "include", no "include/openssl". Sí, las cabeceras están en "include/openssl", pero accedes a ellas poniendo #include <openssl/aes.h>.
Esto se hace o para diferenciar diferentes librerías que puedan tener cabeceras con el mismo nombre, o separar en carpetas, sin más. En cualquier caso, y de forma general, siempre pondrás como directorio "include", y no la carpeta que pueda tener dentro. Además, en este caso estás casi obligado, ya que las propias cabeceras utilizan la fórmula #include <openssl/aes.h>. Título: Re: No puedo declarar la variable por ser un tipo abstracto Publicado por: Borito30 en 12 Marzo 2017, 17:52 pm En directorio de includes, debes poner "include", no "include/openssl". Sí, las cabeceras están en "include/openssl", pero accedes a ellas poniendo #include <openssl/aes.h>. Vale ahora lo entendi que tengo que poner en search directories compiler la ruta include es decir C:\openssl-1.0.1c_static_w32_mingw\include para que me coja openssl/cabecera.h solo que en mi proyecto tendre que indicarlo de esta manera:Esto se hace o para diferenciar diferentes librerías que puedan tener cabeceras con el mismo nombre, o separar en carpetas, sin más. En cualquier caso, y de forma general, siempre pondrás como directorio "include", y no la carpeta que pueda tener dentro. Además, en este caso estás casi obligado, ya que las propias cabeceras utilizan la fórmula #include <openssl/aes.h>. Código: #include <openssl/aes.h> Título: Re: No puedo declarar la variable por ser un tipo abstracto Publicado por: Borito30 en 12 Marzo 2017, 19:00 pm En VS, click derecho en el proyecto, propiedades. Vale en visual studio lo inclui asi:Ahí tienes, dentor de "Configuration properties", la pestaña "C/C++ -> General". Dentro de esta, Additional include directories. Luego, para el linker, si el proyecto se va a linkear, debajo de "C/C++", tienes "Linker". Ene sta, teines "General" también. Ahí, "Additional library dependencies". Luego, en "Linker -> Input", tienes "Additional dependencies". (https://i.imgsafe.org/58c79f0fb9.png) (https://i.imgsafe.org/590180d166.png) Pero me devuelve el siguiente error: Código: Error 30 error LNK1181: no se puede abrir el archivo de entrada 'ssleay32' C:\Users\moh\Desktop\gloox\LINK gloox-1.0 Código: #include <openssl/sha.h> Título: Re: No puedo declarar la variable por ser un tipo abstracto Publicado por: ivancea96 en 12 Marzo 2017, 19:20 pm No en using, en inclusión. Directorios de inclusión.
Título: Re: No puedo declarar la variable por ser un tipo abstracto Publicado por: Borito30 en 12 Marzo 2017, 19:30 pm funciono gracias
Título: Re: No puedo declarar la variable por ser un tipo abstracto Publicado por: Borito30 en 14 Marzo 2017, 13:49 pm abri otro post ya que este es antiguo y no lo puedo poner otra vez para resolverlo
|