Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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!
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.cpp
#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 Connect::MyConnect(){
Abraços :D