簡體   English   中英

FLTK C++ Callbakc 問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM