如何在类向量中存储/使用外部函数指针



我在类中使用vector来存储MQTT 主题和指向处理每个主题的 MQTT 消息的外部函数的指针。我使用typedef来定义类外部的 mqtt 回调函数指针,并在定义vector对象的结构中使用该 typedef。

但是,当我尝试使用typedef在成员函数中定义将对象添加到向量的成员函数中的函数指针时,我收到一个编译错误_'mqttCallback_t'尚未declared_。

void addSubscription(char* topic, mqttCallback_t* cback) {

我希望有人可以解释为什么编译器会生成此消息,以及需要执行哪些操作才能使以下代码正常工作。

// define pointer to an MQTT callback function that is external to the class
typedef void (*mqttCallback_t)(char*, byte*, unsigned int); 
class MqttClient{
struct MqttSubscription {
char topic[64];
mqttCallback_t* callback;
};
private:
byte brokerIP[4];
uint16_t maxPacketLength;   
bool sessionActive;
std::vector<MqttSubscription> subList;
public:
void addSubscription(char* topic, mqttCallback_t* cback) {
MqttSubscription sub;
strncpy(sub.topic, topic, sizeof(sub.topic));
sub.callback = cback;
this->subList.push_back(sub);
}
);

原来是一个编译器问题:

预处理器正在声明类向前。换句话说,编译器试图在 typedef 之前编译类。

将 typedef 移动到 .h 文件解决了这个问题。

感谢那些添加评论的人。

最新更新