我正在编写一个程序来控制 Arduino Mega 微控制器(用 C/C++ 编写)上的自动家庭酿造系统。简而言之,该程序正在做的是有一个 C# 应用程序,它定期通过 USB 向微控制器发送消息。然后有一个我编写的消息接口,它读取消息,并将其转发到消息所针对的任何组件。每条消息有 16 个字节长,前 4 个是事务代码,后 12 个是数据。现在,我阅读了消息并将其转发给我的 StateController 类。它来自 InboundMessage 函数。我想要做的是我有一个结构(在 StateController.h 中定义),其中包含事务代码和指向 StateController 中成员函数的指针。我定义了一个 QueueList(只是一个简单的链表库),并将一堆这些结构推入其中。我想做的是,当一条消息进入 inboundMessage 函数时,我想遍历链表,直到找到匹配的事务代码,然后调用该消息的成员函数,将其传递给消息中的数据。
我想我已经正确初始化了一切,但问题就在这里。当我尝试编译时,我收到一条错误消息,提示“此范围内不存在 func”。我已经到处寻找解决方案,但找不到。我的代码如下
StateController.cpp
StateController::StateController(){
currentState = Idle;
prevState = Idle;
lastRunState = Idle;
txnTable.push((txnRow){MSG_BURN, &StateController::BURNprocessor});
txnTable.push((txnRow){MSG_MANE, &StateController::MANEprocessor});
txnTable.push((txnRow){MSG_MAND, &StateController::MANDprocessor});
txnTable.push((txnRow){MSG_PUMP, &StateController::PUMPprocessor});
txnTable.push((txnRow){MSG_STAT, &StateController::STATprocessor});
txnTable.push((txnRow){MSG_SYNC, &StateController::SYNCprocessor});
txnTable.push((txnRow){MSG_VALV, &StateController::VALVprocessor});
}
void StateController::inboundMessage(GenericMessage msg){
// Read transaction code and do what needs to be done for it
for (int x = 0; x < txnTable.count(); x++)
{
if (compareCharArr(msg.code, txnTable[x].code, TXN_CODE_LEN) == true)
{
(txnTable[x].*func)(msg.data);
break;
}
}
}
状态控制器.h
class StateController{
// Public functions
public:
// Constructor
StateController();
// State Controller message handeler
void inboundMessage(GenericMessage msg);
// Main state machine
void doWork();
// Private Members
private:
// Hardware interface
HardwareInterface hardwareIntf;
// Current state holder
StateControllerStates currentState;
// Preveous State
StateControllerStates prevState;
// Last run state
StateControllerStates lastRunState;
// BURN Message Processor
void BURNprocessor(char data[]);
// MANE Message Processor
void MANEprocessor(char data[]);
// MAND Message Processor
void MANDprocessor(char data[]);
// PUMP Message Processor
void PUMPprocessor(char data[]);
//STAT Message Processor
void STATprocessor(char data[]);
// SYNC Message Processor
void SYNCprocessor(char data[]);
// VALV Message Processor
void VALVprocessor(char data[]);
void primePumps();
// Check the value of two sensors given the window
int checkSensorWindow(int newSensor, int prevSensor, int window);
struct txnRow{
char code[TXN_CODE_LEN + 1];
void (StateController::*func)(char[]);
};
QueueList<txnRow> txnTable;
};
知道有什么问题吗?