David FLEURY
unread,Mar 10, 2013, 5:15:17 PM3/10/13You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to
Hi,
I try to use lambda to replace static function to call some callbacks.
Depending on what optimization args used, I got link error. Work fine
only for -O2 (not without optim flag nor -O only)
Does anybody now what I am doing wrong ?
//[CODE]
#include <iostream>
class Widget;
typedef void (Fl_Callback)(Widget*, void*);
class Widget {
Fl_Callback* cb;
void* user_data;
void do_callback(Widget* o, void* arg) {
cb(o, arg);
}
public:
// static void MyCallback(Widget* o, void* s) {
// Widget* w = (Widget*)o;
// w->event_callback();
// }
Widget() {
// this->callback(&MyCallback, this);
this->callback([=](Widget* w, void* s) {
((Widget*)s)->event_callback();
}, this);
}
void callback(Fl_Callback* c, void* d) {
cb = c;
user_data = d;
}
void do_callback() {
do_callback(this, user_data);
}
void event_callback() {
std::cout << "Calling even_callback" << std::endl;
}
};
int main() {
Widget w;
w.do_callback();
}
/*
david@debian:~/prog/cpp$ g++ -Wall --pedantic --std=c++11 -o lambda
lambda.cpp && ./lambda
/tmp/ccW8cgKy.o: In function `_ZZN6WidgetC1EvENKUlPS_PvE_cvPFvS0_S1_EEv':
lambda.cpp:(.text._ZZN6WidgetC1EvENKUlPS_PvE_cvPFvS0_S1_EEv[_ZZN6WidgetC1EvENKUlPS_PvE_cvPFvS0_S1_EEv]+0x4):
undefined reference to `_ZZN6WidgetC1EvENUlPS_PvE_4_FUNES0_S1_'
collect2: erreur: ld a retourné 1 code d'état d'exécution
david@debian:~/prog/cpp$ g++ -Wall -O --pedantic --std=c++11 -o lambda
lambda.cpp && ./lambda
/tmp/ccaUO2pg.o: In function `main':
lambda.cpp:(.text+0xe): undefined reference to
`_ZZN6WidgetC1EvENUlPS_PvE_4_FUNES0_S1_'
collect2: erreur: ld a retourné 1 code d'état d'exécution
david@debian:~/prog/cpp$ g++ -Wall -O2 --pedantic --std=c++11 -o lambda
lambda.cpp && ./lambda
Calling even_callback
*/
//[/CODE]