2016-07-12 2 views
0

У меня есть класс, который использует существующую ранее библиотеку. Существует вызов функции, которому нужен указатель на функцию, и я пытаюсь передать функцию, которая находится в моем классе. Однако он не компилируется. Что я могу сделать, чтобы исправить это? (Кроме того, я уверен, что об этом просили гораздо более четко. Я из моего элемента с этим, так что мои извинения). Примечание: Это для ардуино.Передача функции класса с использованием указателя функции на внешнюю библиотеку

В моей основной программе у меня есть следующий код ...

#include "CM.h" 

CM cm; 

void setup() { 
    cm.setup(); 
} 

CM.h

class CM { 
    private: 
     LibClass *lib; 
     void onInit(); 

    public: 
     void setup(); 
}; 

CM.cpp

#include "CM.h" 

void CM::setup() { 
    lib->attach(onInit); // <-- this isn't working. 
} 

void CM::onInit() { 
    Serial.println("HERE I AM"); 
} 

ответ

0

Чтобы передать функцию-член, вы необходимо сделать его «статическим», а затем передать его с полным квалификатором:

#include <iostream> 

    void attach(void (*func)(void)); 


    class CM { 
    private: 
    static void onInit(); 

    public: 
     void setup(); 
    }; 

    void CM::setup() 
    { 
     attach(CM::onInit); 
    } 

    void CM::onInit(void) 
    { 
     std::cout << "HERE I AM"; 
    } 

    // a global function pointer for this example 
    void (*p_func)(void); 

    // a "library" attach function 
    void attach(void (*func)(void)) 
    { 
     p_func = func; 

    } 


    int main(int argc, const char * argv[]) { 
     CM my; 

     my.setup(); 

     p_func(); // like the library call 

     return 0; 
    } 
Смежные вопросы