Я следовал примеру программирования sqlite в c++ http://cplus.about.com/od/howtodothingsin1/a/tutorial-two-With-SQLite-and-c.htm
Вот часть моего кода:
#include <iostream>
#include <string>
#include <cstring>
#include <sstream>
#include "sqlite3.h"
sqlite3 *db;
sqlite3_stmt *stmt;
char message[255];
// open the database
int db_open = sqlite3_open(dbname, &db);
if (db_open != SQLITE_OK)
{
cout << "Failed to open database " << sqlite3_errstr(db_open) << '\n';
sqlite3_close(db);
exit(0);
}
cout << "Opened db " << dbname << "OK\n";
//prepare the sql
int db_prepare = sqlite3_prepare_v2(db, sql, strlen(sql) + 1, &stmt, NULL);
if (db_prepare != SQLITE_OK)
{
cout << "Failed to prepare database " << sqlite3_errstr(db_prepare) << '\n';
sqlite3_close(db);
exit(0);
}
Я получил эту ошибку, предлагая мне использовать sqlite3_errmsg вместо sqlite3_errstr (который существует). Почему это?
db2class.cpp:31:45: error: use of undeclared identifier 'sqlite3_errstr'; did you mean 'sqlite3_errmsg'?
cout << "Failed to open database " << sqlite3_errstr(db_open) << '\n';
^~~~~~~~~~~~~~
sqlite3_errmsg
/usr/include/sqlite3.h:2754:24: note: 'sqlite3_errmsg' declared here
SQLITE_API const char *sqlite3_errmsg(sqlite3*);
^
db2class.cpp:31:60: error: cannot initialize a parameter of type 'sqlite3 *' with an lvalue of type 'int'
cout << "Failed to open database " << sqlite3_errstr(db_open) << '\n';
^~~~~~~
/usr/include/sqlite3.h:2754:47: note: passing argument to parameter here
SQLITE_API const char *sqlite3_errmsg(sqlite3*);
^
db2class.cpp:41:48: error: use of undeclared identifier 'sqlite3_errstr'; did you mean 'sqlite3_errmsg'?
cout << "Failed to prepare database " << sqlite3_errstr(db_prepare) << '\n';
^~~~~~~~~~~~~~
sqlite3_errmsg
/usr/include/sqlite3.h:2754:24: note: 'sqlite3_errmsg' declared here
SQLITE_API const char *sqlite3_errmsg(sqlite3*);
^
db2class.cpp:41:63: error: cannot initialize a parameter of type 'sqlite3 *' with an lvalue of type 'int'
cout << "Failed to prepare database " << sqlite3_errstr(db_prepare) << '\n';
^~~~~~~~~~
/usr/include/sqlite3.h:2754:47: note: passing argument to parameter here
SQLITE_API const char *sqlite3_errmsg(sqlite3*);
В учебнике рассказывается, как загрузить последнюю версию SQLite.
Вы не сделали этого, поэтому используете более старую версию, которая еще не имеет функции sqlite3_errstr
.
(BTW; использование sqlite3_errstr
в этом случае неверно; sqlite3_errmsg
возвращает сообщение с более полезной информацией.)
Проверьте версию sqlite.
Версия, в которой была добавлена sqlite3_errstr, была версия 2012-12-12 (3.7.15).