[英]FLTK C++ Callbakc issue
我試圖this
指針作為參數傳遞給我的callback()
,但行為似乎與我預期的不同。
我試圖將調用者對象作為我的 user_data (即callback()
第二個參數) callback()
,顯然它失敗了!
在SaveSettings()
方法中,如果我type cast void*)obj to (SettingsGui*)
,並call foo()
,它會按預期運行(所以,我可以傳遞一個指針來調用SettingsGui obj?)
,但是當我嘗試訪問vector<string> Order
(在SettingsGui::Show()
方法中填充了字符串對象),它失敗了。
我對“成功傳遞一個指針來調用SettingsGui object
”的假設是錯誤的嗎? 如果是這樣,為什么以及如何解決它?
// Gui for Application Settings
class SettingsGui {
vector<string> Order;
public:
const char foo() { return "Test"; }
void Show() {
...
Order.size(); /* it is 44 here */
...
// Save Button
Fl_Button *SaveButton = new Fl_Button(...);
SaveButton->callback(SaveSettings, this);
...
}
static void SaveSettings(Fl_Widget *w, void *d){
SettingsGui *T = (SettingsGui*)obj;
fl_alert(T->foo()); /* this works */
char buf[32];
fl_alert(itoa(T->Order.size(),buf,10)); /* return -1 */
}
};
// Main Application Window
class MainApp {
public:
void Show(){
...
...
Fl_Button *flButton_settings = new Fl_Button(...);
flButton_settings->callback(OpenSettingsGui);
}
static void OpenSettingsGui (Fl_Widget *w, void *d) {
SettingsGui p;
p.ReadSettings(...);
p.Show();
}
};
T->foo() 有效,因為它不訪問類中的任何內容
T->Order.size() 不起作用,因為 T 被轉換為 obj。 它應該被強制轉換為 d。
static void SaveSettings(Fl_Widget *w, void *d){
SettingsGui *T = (SettingsGui*)d;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.