【发布时间】:2019-04-27 01:43:14
【问题描述】:
我在一个类中使用vector 来存储MQTT 主题 和指向处理每个主题的MQTT 消息的外部函数的指针。我使用typedef 在类外部定义mqtt 回调函数指针,并在定义vector 对象的结构中使用该typedef。
但是,当我尝试使用typedef 在将向向量添加对象的成员函数中定义函数指针时,我收到了一个编译错误_'mqttCallback_t' has not been 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);
}
);
【问题讨论】:
-
Can't reproduce 使用您显示的确切代码。
mqttCallback_t和MqttClient是否定义在同一个文件中? -
感谢您花时间运行测试...我的代码完全如上所示编译。
-
我正在使用 ARM GCC CPP 编译器为 IOT 设备创建固件,因此我的代码有空的 setup() 和 loop() 函数,而不是 main()。这是与您的代码的唯一真正区别。
-
吹毛求疵:您的
mqttCallback_t是函数类型,而不是函数指针类型。它周围的括号什么也不做。并且 POSIX 保留_t名称。 -
你是对的......我将 typedef 更改为 *mqttCallback_t,但我看到相同的编译错误。 (感谢 POSIX 提示。我会在它工作后立即修复它。)
标签: c++ vector function-pointers