Я пытаюсь передать this
указатель в качестве аргумента для моего callback()
, но похоже, что поведение не такое же, как я ожидаю.FLTK C++ Callbakc issue
Я пытаюсь передать объект-вызывающий объект в качестве user_data (т. Е. 2-й аргумент 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();
}
};