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