データベースのC++ラッパーを作成中。Sqlite3以下は、(連携して)std::vectorにクエリの結果を格納する 2 つの関数です。テンプレートを作成する前は、どちらも成功していました。宣言の引数であるchar*[]に対してコンパイル エラー (VS では C2664) が発生します。char**Sqlite3
私は十分な知識を持っていませんがC、私が収集したものから、関数の引数として渡された配列はポインタとして書き換えられ、結果は右辺値ですが、変換後に同等になりますchar*[]。char**ただし、それにはvectorconst 参照である必要があり、結果を入力するという目標を無効にします。
成功したクエリで正しくコンパイルするには、これをどのように変更できますか? 他のアドバイスや修正は大歓迎です。前もって感謝します。
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 **)」。