0
我在我的类中有一个静态方法,我使用它作为回调。 在此回调中,我想为result
添加一个值。 由于重铸(?),这似乎不可行。转换后C++读取访问冲突
有没有方法可以访问成员变量result
并在重铸后为其添加值,还是我需要考虑另一种方法?
MyClass.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);
}
MyClass.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;
}
的main.cpp
int main()
{
MyClass* cl = new MyClass();
cl->Do("something");
}
从文档:“sqlite3_exec()的第四个参数被传递到每个回调调用的第一个参数”,您正在投射一个空指针,然后尝试访问它指向的内容,通过this this 'NULL'。 – user657267
谢谢,你完全正确。为什么bar-> Callback(argc,argv,azColName)工作,当我铸造一个nullptr? 再次感谢 – xhallix
这是未定义的行为,这意味着它可能工作,它可能不会,或者它甚至可能会订购你6个月的猫粮。 – user657267