Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rob_Bor

Erro C++ mysql_init

Recommended Posts

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.