2016-06-21 3 views
0

У меня есть класс, который содержит два одинаковых нестатические функции, я хочу, чтобы назначить одну из них на лету функции указателя:C++ Arduino: назначить функцию указатель на функцию

Ач:

class A{ 
    private: 
    void (*funcPtr)(int); 
    void do_sth(int i); 
    void do_sth_else(int i); 
} 

a.cpp:

A::A(int i){ 
    if(i == 1) 
     A::funcPtr = A::do_sth; // or &A::do_sth; 
    else 
     A::funcPtr = A::do_sth_else; // or &A::do_sth_else; 
} 

Но я такая ошибка:

error: cannot convert 'A::do_sth' from type 'void (A::)(int)' to type 'void (*)(int)' 

Я прочитал несколько похожих вопросов, но не могу применить их решения по моей проблеме.

+0

Учитывая ограничения памяти Arduino, указатели на функции могут быть немного сложнее. Если компилятор может справиться с этим, почему бы не использовать [lambdas] (http://stackoverflow.com/questions/24352785/c-closure-to-pass-member-function-as-normal-function-pointer)? –

ответ

1

Это функции-члены. Либо сделайте funcPtr указателем участника, присвоив его классу или сделайте do_sth(), do_sth_else() статические функции-члены. Я бы предложил использовать & перед именем функции, беря ее адрес.

Смежные вопросы