[英]FLTK C++ Callbakc issue
I am trying to pass this
pointer as an argument to my callback()
, but it seems like the behaviour is not same as I expect.我试图
this
指针作为参数传递给我的callback()
,但行为似乎与我预期的不同。
I am trying to pass the caller object as my user_data (ie 2nd argument of callback()
), apparently it fails!我试图将调用者对象作为我的 user_data (即
callback()
第二个参数) callback()
,显然它失败了!
Within SaveSettings()
method, if I type cast void*)obj to (SettingsGui*)
, and call foo()
, it behaves as expected (so, I am able to pass a pointer to calling SettingsGui obj?)
, but when I try to access vector<string> Order
(which is filled with string objects within SettingsGui::Show()
method), it fails.在
SaveSettings()
方法中,如果我type cast void*)obj to (SettingsGui*)
,并call foo()
,它会按预期运行(所以,我可以传递一个指针来调用SettingsGui obj?)
,但是当我尝试访问vector<string> Order
(在SettingsGui::Show()
方法中填充了字符串对象),它失败了。
Is my assumption of "successfully passing a pointer to calling SettingsGui object
" wrong?我对“成功传递一个指针来调用
SettingsGui object
”的假设是错误的吗? If so, why and how can I fix it?如果是这样,为什么以及如何解决它?
// 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() works because it doesn't access anything within the class T->foo() 有效,因为它不访问类中的任何内容
T->Order.size() doesn't work because T is being cast to obj. T->Order.size() 不起作用,因为 T 被转换为 obj。 It should be cast to d.
它应该被强制转换为 d。
static void SaveSettings(Fl_Widget *w, void *d){
SettingsGui *T = (SettingsGui*)d;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.