2015-01-12 49 views
0

我書面方式功能打開一個數據庫,這是它的外觀到目前爲止:SQLITE3,我不明白爲什麼我的指針的值歸零

bool 
Sqlite3::openDB(std::string filename, sqlite3* db) 
{ 
    std::ifstream file (filename.c_str()); 
    if(!file) 
    { 
    std::cerr << "Can't open database, file not found. " << std::endl; 
    return false; 
    } 
    file.close(); 

    if(sqlite3_open(filename.c_str(), &db)) 
    { 
    std::cerr << "Can't open database: " << sqlite3_errmsg(db) << std::endl; 
    sqlite3_close(db); 
    return false; 
    } 
std::cout << (int)db << std::endl; // added to check the pointer (3) 
    return true; 
} 

的main():

int main(int argc, char **argv) 
{ 
    sqlite3 *db = nullptr; 

    std::cout << (int)db << std::endl; // (1) 

    // Open Database 
    sqlite3_engine.openDB("./bedrock.db",db); 
    std::cout << (int)db << std::endl; // (2) 

/*...*/ 

} 

在(1)我得到空,在(3)我得到不爲空,但在東西(2)我得到的東西空,我不明白爲什麼...

回答

1

函數參數是按值傳遞。 openDB()獲得副本變量,修改副本並打印它。原始變量未被修改。

如果要修改參數,請按引用傳遞(例如sqlite3 *&)。

+0

好的謝謝,問題解決了... –

相關問題