gpt4 book ai didi

转换后c++读取访问冲突

转载 作者:行者123 更新时间:2023-11-28 05:34:57 24 4
gpt4 key购买 nike

我的类中有一个静态方法,用于回调。在此回调中,我想向 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com