0
sqliteコールバック関数からクラス内のアクセス変数が必要です。私は他の関数からこの変数にアクセスする必要があるので、静的にすることはできません。これは私の現在のコードです。
メンバ変数へのアクセス方法sqliteコールバック
class fromdb {
private:
string paramdb;
char* errmsg;
string param;
string title;
string creator;
char* bin;
public:
static int callback(void *data, int argc, char **argv, char **azColName){
int lenght;
lenght = sizeof(*argv[3]);
title = *argv[1];
creator = *argv[2];
bin = new char[lenght];
bin = argv[3];
return 0;
}
void getdata() {
string tQuery = "SELECT * FROM test WHERE " + paramdb + "=\"" + param + "\")";
sqlite3_exec(db, tQuery.c_str(), fromdb::callback, (void*)data, &errmsg);
}
};
ログ
undefined reference to `fromdb::title[abi:cxx11]'
undefined reference to `fromdb::creator[abi:cxx11]'
undefined reference to `fromdb::bin'
コールバックパラメータ_1stの引数でクラスの 'this'ポインタを渡します。https://sqlite.org/c3ref/exec.html –
' bin = new char [lenght]; bin = argv [3]; 'なぜあなたは次の行にそれを漏らすだけのメモリを割り当てますか? –
sqlite3_exec(db、tQuery.c_str()、this-> callback、(void *)data、&errmsg)に変更した後。私はこのエラーがあります:/root/Dokumenty/musicdb/funcs.h|94 |エラー:非静的メンバー関数の無効な使用 'int fromdb :: callback(void *、int、char **、char **)' | – BigAdam