- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在类构造函数中调用 setCallback()
函数,并将私有(private)方法作为参数。由于函数所需的函数签名,这不起作用。我的函数问题是我无法访问我的类的特定对象的私有(private)字段。
我已经尝试在类文件中创建一个简单的函数,但由于静态上下文而无法正常工作。我还尝试过只传递一个由于签名而不起作用的方法。
#include <PubSubClient.h>
class Test
{
private:
void callback(char *topic, uint8_t *payload, unsigned int)
{
// things
}
public:
Test(PubSubClient psc)
{
psc.setCallback(callback);
}
};
出现如下编译错误。
no suitable constructor exists to convert from "void (char *topic, uint8_t *payload, unsigned int)" to "std::function<void (char *, uint8_t *, unsigned int)>"
最佳答案
我不熟悉 arduino 编程所以我的回答假设你指的是 this类(class)。另外,我不知道您的样本是否有意使用 PubSubClient 的值进行构造?据我所知,它应该是一个引用或指针,例如
Test(PubSubClient& psc)
{
psc.setCallback(callback);
}
错误消息很好地解释了问题所在。 setCallback() 方法需要一个 std::function 并且它不能从类成员函数的值创建一个。 example section of std::function cppreference为您提供了多种不同的方法来制作 std::function。如果您确定您的 Test 对象与 PubSubClient 一样长,那么我建议使用 std::bind 示例,例如
Test(PubSubClient& psc)
{
using std::placeholders::_1;
using std::placeholders::_2;
using std::placeholders::_3;
psc.setCallback(std::bind( &Test::callback, this, _1,_2,_3));
}
关于c++ - 在类中设置PubSubClient API的回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58233146/
我无法发送超过一定限制的消息。我看过 docs并且已经尝试重新定义最大数据包大小: #define MQTT_MAX_PACKET_SIZE 512 我什至尝试将限制增加到荒谬的限制,但消息仍然被忽略
我正在使用 ESP8266,并希望使用 MQTT 来控制它,MQTT 服务器是我的 Synology DS415+。我希望 ESP 位于安装后无法使用串行访问它的地方,因此我需要能够使用 WiFi 配
我是一名优秀的程序员,十分优秀!