首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Coap Works放在另一个类中

将Coap Works放在另一个类中
EN

Stack Overflow用户
提问于 2019-08-18 13:18:30
回答 1查看 34关注 0票数 0

我曾经这样使用过coap服务器:

代码语言:javascript
复制
coapServer coap;
coap.server(callback_light, "light");
coap.start();

以及回调方法:

代码语言:javascript
复制
void callback_light(coapPacket *packet, IPAddress ip, int port,int obs) {
  ///Some Work...
}

而且它工作得很完美。我创建了一个名为COAPService的类和头文件:

代码语言:javascript
复制
#include <coap_server.h>
class COAPService
{
private:
    coapServer coap;
    int WiFiTimeOut = 5000;
    void getListOfWiFi(coapPacket *packet, IPAddress ip, int port, int obs);//id = 0 GET

public:
    COAPService();
    void COAPLoop();
};

和cpp文件:

代码语言:javascript
复制
    #include "COAPService.h"
#include <coap_server.h>
#include <ESP8266WiFi.h>

COAPService::COAPService()
{
    coap.server(static_cast<COAPService*>(this)->getListOfWiFi, "wifilist");
    coap.start(5683);
}
void COAPService::getListOfWiFi(coapPacket *packet, IPAddress ip, int port, int obs) //id = 0 GET
{
    ///Some Work
}

我的问题出在构造函数上。当我为callBack方法调用static_cast(this)->getListOfWiFi时,它返回:

代码语言:javascript
复制
COAPService.cpp:7:75: error: no matching function for call to 'coapServer::server(<unresolved overloaded function type>, const char [9])'

     coap.server(static_cast<COAPService*>(this)->getListOfWiFi, "wifilist");

为什么会出现这个错误?

EN

回答 1

Stack Overflow用户

发布于 2019-08-18 13:32:23

我假设问题是您将一个成员函数指针传递给coapServer,以便在将来的某个时候被调用。

如果这是正确的,我假设您作为参数传递给coap.server()的函数指针一定是一个非成员函数,因为您任何时候都没有传递对象指针。

尝试将getListOfWiFi转换为静态(在函数签名中包含关键字static ):

代码语言:javascript
复制
static void getListOfWiFi(coapPacket *packet, IPAddress ip, int port, int obs);

或者只是在任何类/结构之外声明这个函数。

COAPService ctor中,只需传递它的地址:

代码语言:javascript
复制
COAPService::COAPService()
{
    // the static_cast you made here doesn't make much sense.
    coap.server(getListOfWiFi, "wifilist");
    coap.start(5683);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57541848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档