2011-02-13 102 views
0

好吧,我只是直接把我的代碼在這裏:C++和MySql ++ ::分段錯誤?

的main.cpp

mysqlpp::Connection conn(false); 

int main() { 
if (conn.connect(DATABASE, HOST, DBUSER, DBPASS)) { 
    Users a(conn, "test","pass"); 
    //a.authenticate(); 

和我Users.cpp:

Users::Users(mysqlpp::Connection conn, string username, string password) { 
    this->conn = conn; 
    this->username = username; 
    this->password = password; 
} 

我可以編譯沒有錯誤的程序,但在命令行,它說「分段錯誤」。這是什麼錯誤?以及如何解決它?

+1

請嘗試調試代碼中查找當程序遇到分段錯誤時執行哪條語句? – 2011-02-13 13:12:25

+0

我強烈地感受到它的Users構造器。如果我排除構造函數,程序沒有錯誤。 – 2011-02-13 13:15:04

回答

2

您應該在Users類中存儲指向mysqlpp::Connection的指針,然後在您的構造函數中接受一個指針而不是整個連接對象。不要忘記更新你的類實現中的其他引用。

main.cpp中:

取代

mysqlpp::Connection conn(false); 

mysqlpp::Connection *conn = new mysqlpp::Connection(false); 

Users.cpp

取代

Users::Users(mysqlpp::Connection conn, string username, string password) { 
this->conn = conn; 

Users::Users(mysqlpp::Connection *conn, string username, string password) { 
this->conn = conn; 

只要你Users.h它說,這樣的事情

class Users 
{ 
    private: 
     mysqlpp::Connection *conn; // <-- the star is important! 
    // rest of class definition goes here 
}; 

,那麼你訪問的conn的方法,如conn->method()