【发布时间】:2017-06-04 14:01:08
【问题描述】:
我正在使用 Arduino IDE 和 things network arduino 库来创建 LoRa mote。
我创建了一个类来处理所有与 LoRa 相关的功能。在此类中,如果我收到下行链路消息,我需要处理回调。 ttn 库有一个 onMessage 函数,我想在我的 init 函数中设置它并解析另一个函数,它是一个类成员,称为 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和std::bind。