我使用Arduino IDE和東西網絡arduino庫來創建一個LoRa mote。C++回調類函數
我創建了一個應該處理所有LoRa相關函數的類。在這個類中,如果我收到下行消息,我需要處理回調。 ttn庫有我想在我的init函數中設置的onMessage函數,並解析另一個函數,它們是一個叫做message的類成員。 我收到錯誤「非法使用非靜態成員函數」。
// File: LoRa.cpp
#include "Arduino.h"
#include "LoRa.h"
#include <TheThingsNetwork.h>
TheThingsNetwork ttn(loraSerial,debugSerial,freqPlan);
LoRa::LoRa(){
}
void LoRa::init(){
// Set the callback
ttn.onMessage(this->message);
}
// Other functions
void LoRa::message(const uint8_t *payload, size_t size, port_t port)
{
// Stuff to do when reciving a downlink
}
和頭文件
// File: LoRa.h
#ifndef LoRa_h
#define LoRa_h
#include "Arduino.h"
#include <TheThingsNetwork.h>
// Define serial interface for communication with LoRa module
#define loraSerial Serial1
#define debugSerial Serial
// define the frequency plan - EU or US. (TTN_FP_EU868 or TTN_FP_US915)
#define freqPlan TTN_FP_EU868
class LoRa{
// const vars
public:
LoRa();
void init();
// other functions
void message(const uint8_t *payload, size_t size, port_t port);
private:
// Private functions
};
#endif
我曾嘗試:
ttn.onMessage(this->message);
ttn.onMessage(LoRa::message);
ttn.onMessage(message);
但是正如我此前的預期沒有一次成功。
非靜態成員函數需要調用* object *。如果您沒有對象,則不能使用非靜態成員函數。一旦你有一個對象,我建議你看看['std :: function'](http://en.cppreference.com/w/cpp/utility/functional/function)和['std :: bind']( http://en.cppreference.com/w/cpp/utility/functional/bind)。 –