Autor
|
Tema: No puedo declarar la variable por ser un tipo abstracto (Leído 5,301 veces)
|
Borito30
Desconectado
Mensajes: 481
|
Estoy creando una clase basada en la libreria gloox pero cuando creo un miembro de mi clase me devuelve el siguiente error: error: cannot declare variable 'b' to be of abstract type 'Bot'| #include "gloox/src/client.h" #include "gloox/src/messagehandler.h" #include "gloox/src/message.h" #include "gloox/src/presencehandler.h" #include "gloox/src/connectionlistener.h" #include <ctime> #include <iostream> #include <string> using namespace std; using namespace gloox; //my one const string LOGIN = "gmail.com"; ostream& operator<<(ostream& os, Message::MessageType type) { switch (type) { case Message::Chat: os << "Chat"; break; case Message::Error: os << "Error"; break; case Message::Groupchat: os << "Groupchat"; break; case Message::Headline: os << "Headline"; break; case Message::Normal: os << "Normal"; break; case Message::Invalid: os << "Invalid"; break; default: os << "unknown type"; break; } return os; }
ostream& operator<<(ostream& os, const Message& stanza) { os << "type:'" << stanza.subtype() << "' from:'" << stanza.from().full() << "' body:'" << stanza.body() << "'"; return os; }
class Bot : public MessageHandler, /*public PresenceHandler,*/ public ConnectionListener /*,public RosterListener*/{ public: Bot(){ JID jid( "mmaaria123@gmail.com/home" ); client = new Client( jid, "mmaaria123" ); client->registerConnectionListener( this ); client->registerMessageHandler( this ); client->connect(true); }
virtual void onConnect() { cout << "It is connected good:)" << endl; //sleep(5); client->disconnect(); }
virtual void onDisconnect(ConnectionError e) { cout << "ConnListener::onDisconnect() " << endl; } /* virtual bool onTLSConnect(const CertInfo& Info) {
time_t tm = Info.date_from; time_t tm_to = Info.date_to; cout << "\t Certificate information to " << LOGIN << endl; cout << "\t========================================" << endl; // number code << "\tServer status: " << Info.status; if (Info.status !=0) { cout << "\t !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl; cout << "\t !!! The certificate has a problem !!!" << endl; cout << "\t !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl; // parsing binary Status Cert if ((CertInvalid) & Info.status) { cout << "\t- The certificate is not trusted " << endl; } if (( CertSignerUnknown) & Info.status) { cout << "\t- The certificate hasn't got a kown issuer" << endl; } if ((CertRevoked) & Info.status) { cout << "\t- The certificate has been revoked " << endl; } if ((CertExpired) & Info.status) { cout << "\t- The certificate has expired " << endl; } if ((CertNotActive) & Info.status) { cout << "\t- The certificate is not yet active " << endl; } if ((CertWrongPeer) & Info.status) { cout << "\t- The certificate has not issued for the peer we're connected to " << endl; } if ((CertSignerNotCa) & Info.status) { cout << "\t- The signer is not CA " << endl; } cout << endl; } // end parsing else // if Info.status=0 sertificate is valide cout << " *** Cert is OK!" << endl;
cout << "\tChain: " << Info.chain << endl; cout << "\tIssuer: " << Info.issuer << endl; cout << "\tServer: " << Info.server << endl; cout << "\tCert date from: " << ctime(&tm); cout << "\tCert date to: " << ctime(&tm_to); cout << "\tProtocol: " << Info.protocol << endl; cout << "\tCipher: " << Info.cipher << endl; cout << "\tMAC: " << Info.mac << endl; cout << "\tCompression: " << Info.compression << endl; cout << "\t========================================" << endl; return true;
} */ virtual void handleMessage( const Message& stanza, MessageSession* session = 0 ){ Message msg(Message::Chat, stanza.from(), "hello world" ); client->send( msg ); }
private: Client* client; };
int main(){ cout << "1" << endl; Bot b; }
|
|
|
En línea
|
Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
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
|
|
« Última modificación: 1 Marzo 2017, 12:50 pm por ivancea96 »
|
En línea
|
|
|
|
Borito30
Desconectado
Mensajes: 481
|
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?
|
|
|
En línea
|
Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)
|
|
|
|
Borito30
Desconectado
Mensajes: 481
|
Una pregunta ya puedo usar openssl pero porque cuando el siguiente ejemplo pongo una cabecera de openssl ej: #include <iostream> #include <aes.h> using namespace std;
int main() { cout << "Hello world!" << endl; return 0; }
Incluyo esta cabecera: Me devuelve este error gracias por su ayuda: ||=== Build: Debug in main (compiler: GNU GCC Compiler) ===| C:\openssl-1.0.1c_static_w32_mingw\include\openssl\aes.h|55|fatal error: openssl/opensslconf.h: No such file or directory| ||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
|
|
« Última modificación: 12 Marzo 2017, 16:22 pm por Ragaza »
|
En línea
|
Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
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>
|
|
|
En línea
|
|
|
|
Borito30
Desconectado
Mensajes: 481
|
Este es el error que me aparece en mingw: ||=== Build: Debug in main (compiler: GNU GCC Compiler) ===| C:\openssl-1.0.1c_static_w32_mingw\include\openssl\aes.h|55|fatal error: openssl/opensslconf.h: No such file or directory| ||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
|
|
« Última modificación: 12 Marzo 2017, 17:32 pm por Ragaza »
|
En línea
|
Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
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".
|
|
|
En línea
|
|
|
|
Borito30
Desconectado
Mensajes: 481
|
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!
|
|
|
En línea
|
Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
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>.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Error 91: Variable de tipo object o la variable de bloque with no esta estableci
Programación Visual Basic
|
brus_k10
|
2
|
6,395
|
16 Junio 2009, 16:20 pm
por cassiani
|
|
|
[MOD] Declarar variable parar dividir parte entera y real
« 1 2 3 »
Programación Visual Basic
|
frankiani
|
20
|
13,674
|
3 Julio 2009, 15:17 pm
por Karcrack
|
|
|
[solucionado] Declarar una variable global
« 1 2 »
Programación Visual Basic
|
CAR3S?
|
17
|
9,718
|
25 Abril 2011, 04:23 am
por CAR3S?
|
|
|
(solucionado) [vb] problema al declarar una variable
« 1 2 »
Programación Visual Basic
|
SuperDraco
|
18
|
6,349
|
14 Julio 2011, 16:58 pm
por 79137913
|
|
|
(Python) Porque no se puede declarar una variable que empieze con un numero?
Scripting
|
BigKaz
|
1
|
1,821
|
20 Noviembre 2016, 01:40 am
por engel lex
|
|