2012-03-17 84 views
0

我開始研究一個類,其中包括我的項目(遊戲服務器)需要的許多重新組合通用mysql任務的函數。自定義MySQL函數類

現在有isint因爲我正在學習如何使用C++

的MySQL雖然試圖建立這個類作爲共享庫(Linux下)我有一個錯誤,這是非常..

error: ‘connect’ was not declared in this scope 

所以..它發生在函數checklogin()當然我有點明白它是什麼意思,問題是這connect是在另一個函數connectdb()中聲明,我在同一個庫中。我試圖重複指針的事情,但是當我輸入checklogin函數(seg fault actualy來自mysql庫,從調試器所說的)時,它會導致我出現seg故障,所以我認爲它可能不是正確的方法(或是否?)

無論如何,我想知道什麼可以解決這個問題,再次指向connect?或管理該指針得到另一個功能 這裏檢測的是代碼...(巫順便說一下,函數的代碼已經幾乎複製/從本教程http://www.nitecon.com/tutorials-articles/develop/cpp/c-mysql-beginner-tutorial/粘貼)

sssql.cpp

#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函數創建它是一個局部變量,所以一旦connectdb回報connect是德stroyed。當你在checklogin()中重新聲明它時,你實際上與上帝創建一個單獨的變量只知道可以存儲在其中的內容,然後嘗試使用它與MySQL進行通信,這將不起作用。

什麼,你應該做的是,宣佈connect爲私有類成員:

class sssql 
{ 
private: 
    MySQL *connect; 

.... 
}; 

這將使它的範圍在類中聲明的所有功能。如果您選擇,您可以在施工期間或在單獨的功能(如connectdb())中對其進行實例化。但在繼續之前,我強烈建議您閱讀variable scope以及其他來自the same site的教程。

P.S.還有一個建議是不要命名變量connect,因爲在同名的幾個庫中有函數。