データベースのC++
ラッパーを作成中。Sqlite3
以下は、(連携して)std::vector
にクエリの結果を格納する 2 つの関数です。テンプレートを作成する前は、どちらも成功していました。宣言の引数であるchar*[]
に対してコンパイル エラー (VS では C2664) が発生します。char**
Sqlite3
私は十分な知識を持っていませんがC
、私が収集したものから、関数の引数として渡された配列はポインタとして書き換えられ、結果は右辺値ですが、変換後に同等になりますchar*[]
。char**
ただし、それにはvector
const 参照である必要があり、結果を入力するという目標を無効にします。
成功したクエリで正しくコンパイルするには、これをどのように変更できますか? 他のアドバイスや修正は大歓迎です。前もって感謝します。
template<class T, class A>
int exec_callback(void *ptr, int argc, char *argv[], char *names[]) {
vector<T, A> *vec = reinterpret_cast<vector<T, A> *>(ptr);
vec->push_back(T(int(argv[0]), string(argv[1]), atoi(argv[2]), atoi(argv[3]),
atoi(argv[4]), atoi(argv[5])));
return 0;
}
template<class T, class A>
void selectAllList(vector<T, A>& vec, sqlite3 *db, const char* statement) {
char *errmsg = NULL;
sqlite3_exec(db, statement, exec_callback, &vec, &errmsg);
if (errmsg) {
printf("error: %s!\n", errmsg);
return;
}
else {
fprintf(stdout, "Operation done successfully\n");
}
list(vec);
}
編集:
に変更char *argv[], char *names[]
しchar **argv, char **names
ても効果はありません。同じエラーをスローします:「引数3をからint (__cdecl *)(void *,int,char **,char **)
に変換できませんint (__cdecl *)(void *,int,char **,char **)
」。