我在一个类中使用vector
来存储 MQTT主题和指向外部函数的指针,该函数处理每个主题的MQTT消息。我使用typedef
在类之外定义mqtt回调函数指针,并在定义vector
对象的结构中使用该typedef。
但是,当我尝试使用typedef
在成员函数中定义函数指针(该函数将对象添加到向量)中定义_'mqttCallback_t'时,我收到了编译错误。
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);
}
);
答案 0 :(得分:0)
原来是编译器问题:
预处理器正在声明该类前进。换句话说,编译器正在尝试在typedef之前编译该类。
将typedef移至.h文件即可解决此问题。
感谢那些添加评论的人。