Sqlite3, я не понимаю, почему мой указатель возвращается nulled

0

Я пишу функцию для открытия базы данных, так она выглядит так:

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)

/*...*/

}

at (1) Я получаю null, в (3) я получаю что-то не null, но в (2) я получаю что-то null, и я не понимаю, почему...

Теги:
sqlite3

1 ответ

1
Лучший ответ

Параметры функции передаются по значению. openDB() получает копию переменной db, модифицирует копию и печатает ее. Исходная переменная не изменяется.

Если вы хотите изменить параметр, перейдите по ссылке (например, как sqlite3 *&).

  • 0
    хорошо, спасибо, проблема решена ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню