Rob_Bor 0 Denunciar post Postado Fevereiro 8, 2012 Boa tarde Galera, estou com uma função que creio ser simples mas está me retornando um erro estranho e já fucei sites ingleses e não achei nada que me ajudasse se alguem ja passou por isso da uma força ai: Estou tentando fazer uma struct em C++ para conexão do banco de dados, o arquivo Connect.h está assim: #ifndef CONNECT_H #define CONNECT_H #include <cstdio> #include <cstdlib> #include <cstring> #include <windows.h> #include <mysql.h> struct Connect { public: Connect(); // declaração do construtor ~Connect(); // declaração do destrutor void MyConnect(); MYSQL* m_pdbDados; // inicializa o acesso ao MySQL server m_pdbDados = mysql_init( NULL ); // o erro está apontando nesta linha }; //struct Conect #endif o arquivo de Connect.cpp está assim: #include "Connect.h" Connect::Connect() // constructor { } //Connect::Connect() Connect::~Connect() // destructor { } //Connect::~Connect() void Connect::MyConnect() { int iReturn = 0; // estabelece a conexão com o banco de dados mysql_real_connect ( m_pdbDados, /* pointer to connection handler */ "localhost", /* host to connect to */ "root", /* user name */ "pass", /* password */ "banco", /* database to use */ 0, /* port (default 3306) */ NULL, /* socket or /var/lib/mysql.sock */ 0 ); /* flags (none) */ // Verificando se a consexão com o banco de dados foi feita com sucesso if ( mysql_real_connect > 0 ) { puts ( "Conexão feita com sucesso" ); } else { puts ( "Falha ao conectar com o banco de dados" ); } return iReturn; } //int Connect::MyConnect() os erros ao compilar são os seguintes Error 1 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int connect.h 25 Error 2 error C2864: 'Connect::m_pdbDados' : only static const integral data members can be initialized within a class connect.h 25 Alguém teria idéia de como resolver isso? Lembrando que em projetos .C esse código compila e funciona! Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Fevereiro 8, 2012 Em projetos na linguagem C esse código NUNCA compilaria, tem funções na struct. E evite utilizar a keyword 'struct' quando for escrever dados desse tipo com funções, utilize 'class' ao invés disso. Só use struct quando não for por dados nela. E o erro acontece porque você não pode fazer chamadas a funções no meio da struct/class. Lembre-se, uma struct não é uma função, ela contém dados e protótipos. Outra coisa, você não pode inicializar membros que não sejam const na declaração da classe. O que corrigiria seu erro e faria o resultado que você quer é colocar a inicialização no construtor, é para isso que ele serve. Comentários não são para descrever a linguagem, são para descrever o que está fazendo. É óbvio que Connect() lá na classe é o construtor, a linguagem diz isso, não precisa de um comentário para tal. A finalidade deles é explicar o que a classe/função faz, algum algoritmo, o que você não está fazendo. Boa prática: todos os dados devem ser colocados na seção private da classe. Se alguém tiver que acessá-los de fora, faça por uma função tipo getData() e storeData(), isso evita que maus usos aconteçam... Boa prática: só inclua os headers em um header que são realmente necessários. Se não forem, inclua-os no .cpp. Assim, você evita de, na hora que incluir tal arquivo, incluir mais headers junto, pode não ser o que quem está usando o código quer. Por exemplo, o Windows.h, cstdlib, cstdio e cstring poderiam ficar no .cpp, já que não são usados no .h. Ah, e também seria bom utilizar a bib da C++, mas isso é questão de gosto. Eu prefiro a da C, é mais rápida, mas a boa prática diz para usar a da C++. A escolha é sua. Então, no final, ficaria assim, teste: --- Connect.h #ifndef CONNECT_H #define CONNECT_H #include <mysql.h> class Connect { MYSQL* m_pdbDados; public: Connect(); ~Connect(); void MyConnect(); }; #endif --- Connect.cpp #include <cstdio> #include <cstdlib> #include <cstring> #include <windows.h> #include "Connect.h" Connect::Connect() { // inicializa o acesso ao MySQL server m_pdbDados = mysql_init( NULL ); } //Connect::Connect() Connect::~Connect() { } //Connect::~Connect() void Connect::MyConnect() { int iReturn = 0; // estabelece a conexão com o banco de dados mysql_real_connect ( m_pdbDados, /* pointer to connection handler */ "localhost", /* host to connect to */ "root", /* user name */ "pass", /* password */ "banco", /* database to use */ 0, /* port (default 3306) */ NULL, /* socket or /var/lib/mysql.sock */ 0 ); /* flags (none) */ // Verificando se a consexão com o banco de dados foi feita com sucesso if ( mysql_real_connect > 0 ) { puts ( "Conexão feita com sucesso" ); } else { puts ( "Falha ao conectar com o banco de dados" ); } return iReturn; } //int Connect::MyConnect() Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites