2

データベースの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 **)」。

4

0 に答える 0