我的类中有一个静态方法,用于回调。
在此回调中,我想向 result
添加一个值。
由于重铸(?),这似乎是不可能的。
有没有办法访问成员变量result
并在重铸后为其添加值,还是我需要考虑其他方法?
我的类.h
class MyClass
{
public:
vector<string> result;
static int c_CB(void *data, int argc, char **argv, char **azColName);
int Callback(int argc, char **argv, char **azColName);
void Do(string query);
}
我的类.cpp
void MyClass:Do(string query)
{
sqlite3_exec(this->dbResource, query.c_str(), this->c_CB , NULL, &this->errorMsg);
}
int MyClass::c_CB(void *NotUsed, int argc, char **argv, char **azColName)
{
MyClass* bar = reinterpret_cast<MyClass*>(NotUsed);
// after reinterpret cast, it does not work
//bar->result.insert(bar->result.end(), "foo");
// function call works
return bar->Callback(argc, argv, azColName);
}
int MyClass::Callback(int argc, char **argv, char **azColName)
{
cout << "working" << endl;
}
主要.cpp
int main()
{
MyClass* cl = new MyClass();
cl->Do("something");
}
最佳答案
The documentation声明 sqlite3_exec
的第四个参数作为回调的第一个参数传递。
当前您正在传递 NULL
,然后将其转换为 MyClass*
并尝试访问该对象,这会导致未定义的行为。
使用 this
作为第四个参数来代替 NULL
。
关于转换后c++读取访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38537976/