Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Using lambda - link error

13 views
Skip to first unread message

David FLEURY

unread,
Mar 10, 2013, 5:15:17 PM3/10/13
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]
0 new messages