我正在创建一个类来处理两个无线电台之间的一些无线电通信,每个无线电台都连接到一个Arduino。我计划将一个函数列表传递给类,以处理接收到的不同消息。
我的问题是,当将函数数组保存到私有变量时,我会得到以下错误:
incompatible types in assignment of 'void (**)(uint8_t*) {aka void (**)(unsigned char*)}' to 'void (* [0])(uint8_t*) {aka void (* [0])(unsigned char*)}'
唯一的区别是*对[0]
Comms.h
class Comms {
public:
//data handlers are arrays of functions that handle data received with an id equal to their index in the array
typedef void (*DataHandler)(uint8_t data[RH_RF95_MAX_MESSAGE_LEN]);
Comms(bool isMaster, uint16_t Hz, DataHandler handlers[]);
void updateRun();
//first element should be the id, followed by some data
void queueData(uint8_t data[RH_RF95_MAX_MESSAGE_LEN]);
int8_t getLastRSSI();
private:
RH_RF95 *rf95;
QueueList<uint8_t[]> messageQueue;
bool master;
uint16_t pingDelay;
DataHandler dataHandlers[];
};Comms.cpp缩减了
#include "Comms.h"
Comms::Comms(bool isMaster, uint16_t hz, DataHandler handlers[]){
master = isMaster;
pingDelay = 1/hz;
dataHandlers = handlers; ######ERROR HERE######
////setup code////
...发布于 2018-02-08 03:27:00
你在这里有两个选择:
dataHandlers/handlers/both标记为DataHandler *。std::vector<DataHandler>,处理程序是lvalue (std::vector<DataHandler> &)引用。我在重新创建代码的关键方面时遇到的错误是,堆栈分配的数组基本上是不可变的指针,因此您基本上是在编写相当于DataHandler * const的指针。由于所有字段都具有默认初始化,无论您是否在构造函数中的初始化程序列表中指定了初始化程序列表(对于dataHandlers的类型不能指定,因为您在字段声明中基本上指定了其默认值),因此基本上是试图重新分配DataHandler指针所指向的值。
https://stackoverflow.com/questions/48676953
复制相似问题