FLTK C++ Callbakc 问题
Posted
技术标签:
【中文标题】FLTK C++ Callbakc 问题【英文标题】:FLTK C++ Callbakc issue 【发布时间】:2015-06-16 03:55:08 【问题描述】:我正在尝试将 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();
;
【问题讨论】:
【参考方案1】:T->foo() 有效,因为它不访问类中的任何内容
T->Order.size() 不起作用,因为 T 被强制转换为 obj。它应该被强制转换为 d。
static void SaveSettings(Fl_Widget *w, void *d)
SettingsGui *T = (SettingsGui*)d;
【讨论】:
以上是关于FLTK C++ Callbakc 问题的主要内容,如果未能解决你的问题,请参考以下文章