我在类中使用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 文件解决了这个问题。
感谢那些添加评论的人。