2016-07-12 143 views
0

我有一個使用預先存在的庫的類。有一個函數調用需要一個函數指針,我試圖傳入我的類中的函數。它雖然不編譯。我能做些什麼來解決這個問題? (另外,我確信這是以更清晰的方式被問到的,因爲我對此表示歉意,所以我的道歉)。 注:這是一個arduino。使用函數指針傳遞類函數到外部庫

在我的主要節目,我有以下代碼...

#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; 
    }