2012-03-17 2 views
0

필자는 내 프로젝트 (게임 서버)가 필요로하는 많은 함수를 그룹핑하는 공통적 인 mysql 태스크를 포함한 클래스에서 작업하기 시작했다.커스텀 MySQL 함수 클래스

는 지금

.. 난 (리눅스에서) 내가 여기있다, 오류가 공유 라이브러리로이 클래스를 구축을 위해 노력하는 동안 C++

와 MySQL을 사용하는 방법을 배우고만큼이 isint

error: ‘connect’ was not declared in this scope 

그래서 .. 내가 다소 그것이 무엇을 의미하는지 이해 과정의 기능 checklogin()에서 일어나는는, 문제는이 connect 내가 같은 라이브러리에서 만든 다른 함수 connectdb()에 선언되어 있다는 점이다. 난 그냥 포인터 물건을 반복하려하지만, 그때 내가 그함수를 (seg 오류가 실제로 디버거가 말한에서 MySQL 라이브러리에서 온 seg 오류를 입력) seg 오류가 날 리드 그래서 나는 그것이 올바른 방법이되지 않을 수도 있다고 생각 (또는 그 것이었다?)

어쨌든, 다시 connect로,이 문제에 대한 가능한 해결책이 될 수 있는지 포인트를 궁금 해서요? 또는이 포인터가 다른 함수 여기 에 의해 감지 얻을 것을 관리하는 코드입니다 ...

sssql.cpp (그런데 마녀, 기능 코드는이 튜토리얼 http://www.nitecon.com/tutorials-articles/develop/cpp/c-mysql-beginner-tutorial/에서 붙여 넣기 거의 복사/있었다)

#include "sssql.h" 

sssql::sssql() 
{ 
    //ctor 
} 

sssql::~sssql() 
{ 
    //dtor 
} 


bool sssql::checklogin(std::string, std::string) 
{ 
    MYSQL *connect; 
    MYSQL_RES *res_set; 
    MYSQL_ROW row; 
    mysql_query(connect,"SELECT * FROM account"); 

    unsigned int i = 0; 

    res_set = mysql_store_result(connect); 

    unsigned int numrows = mysql_num_rows(res_set); 

    while ((row = mysql_fetch_row(res_set)) != NULL) 
     { 
     printf("%s\n",row[i] != NULL ? 
     row[i] : "NULL"); 
     } 

} 

bool sssql::connectdb() 
{ 
    MYSQL *connect; 
    connect=mysql_init(NULL); 
    if(!connect) 
    { 
     printf("MySQL Initialization Failed"); 
     return 1; 
    } 

    connect=mysql_real_connect(connect,SERVER,USER,PASSWORD,DATABASE,0,NULL,0); 

    if(connect){ 
     printf("Connection Succeeded\n"); 
    } 
    else{ 
     printf("Connection Failed!\n"); 
    } 
} 

sssql.h

#ifndef SSSQL_H 
#define SSSQL_H 
#include "mysql.h" 
#define SERVER "localhost" 
#define USER "root" 
#define PASSWORD "password" 
#define DATABASE "database" 
#include <stdio.h> 
#include <string> 
class sssql 
{ 
    public: 
     sssql(); 
     virtual ~sssql(); 

     // Check login info 
     std::string usrcheck; 
     std::string passwd; 
     bool connectdb(); 
     bool checklogin(std::string, std::string); 
    protected: 
    private: 
}; 

#endif // SSSQL_H 

답변

0
connect와 문제는 당신이 connectdb 반환하면 connect 드 그래서이 지역 변수가 어디 connectdb 함수를 만들 수 있다는 것입니다

stroyed. checklogin()에서 다시 선언 할 때 신과 함께 별도의 변수를 만들면 그 안에 저장할 수있는 것이 무엇인지 알게되고 작동하지 않는 MySQL과 통신하는 데 사용하려고 시도합니다.

당신이 개인 클래스 멤버로 connect 선언되어 일을해야한다 : 클래스에 선언 된 모든 기능 범위에 그것을 만들 것입니다

class sssql 
{ 
private: 
    MySQL *connect; 

.... 
}; 

. 구성하는 동안 또는 선택하면 connectdb()과 같은 별도의 함수로 인스턴스를 생성 할 수 있습니다. 그러나 계속하기 전에 variable scope 및 기타 튜토리얼을 the same site에서 읽으시기 바랍니다.

P. 한 가지 더 제안은 동일한 이름의 라이브러리가 n 개 있기 때문에 변수 connect의 이름을 지정하지 않는 것입니다.

관련 문제