2

在为数据库创建C++包装器的过程中。Sqlite3下面是两个(一起工作)std::vector用查询结果填充的函数;在我尝试对它们进行模板化之前,这两者都是成功的。char*[]对于声明char**中的参数,我收到编译错误(VS 中的 C2664)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 **)”。

4

0 回答 0