gpt4 book ai didi

c++ - FLTK C++ Callbakc 问题

转载 作者:行者123 更新时间:2023-11-28 06:13:08 24 4
gpt4 key购买 nike

我正在尝试通过 this指针作为我的 callback() 的参数, 但似乎行为与我预期的不一样。

我试图将调用者对象作为我的 user_data 传递(即 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;

关于c++ - FLTK C++ Callbakc 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30858498/

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