微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

错误:没有匹配的函数调用 'uWS::TemplatedApp<false>::ws<main()::UserData>(const char [3], <brace-enclosed initializer list>)'

如何解决错误:没有匹配的函数调用 'uWS::TemplatedApp<false>::ws<main()::UserData>(const char [3], <brace-enclosed initializer list>)'

我正在使用 uwebsockets 创建 ws 服务器。

ma​​in.cpp:

int main()
{
  struct UserData {

  };

  uWS::App().ws<UserData>("/*",{

      /* Just a few of the available handlers */
      .open = [](auto *ws) {
          /* MQTT Syntax */
          ws->subscribe("sensors/+/house");
      },.message = [](auto *ws,std::string_view message,uWS::OpCode opCode) {
          ws->send(message,opCode);
      }

  }).listen(9001,[](auto *listenSocket) {

      if (listenSocket) {
          std::cout << "Listening on port " << 9001 << std::endl;
      }

  }).run();
  return 0;
}

构建时的错误消息:

……main.cpp:22:4: note:   cannot convert '{<lambda closure object>main()::<lambda(auto:11*)>{},<lambda closure object>main()::<lambda(auto:12*,std::string_view,uWS::OpCode)>{}}' (type '<brace-enclosed initializer list>') to type 'uWS::TemplatedApp<false>::WebSocketBehavior<main()::UserData>&&'
   }).listen(9001,[](auto *listenSocket) {
    ^

环境:

操作系统:Windows10 64 位

IDE:QtCreator

编译器:MinGW 8.1.0 32bit

c++std:17

uwebsockets: 19.2.0

解决方法

这是因为编译器无法将“大括号括起来的初始化列表”转换为 T&&。可以通过声明结构体并将其转换为右值引用来解决。

  struct UserData {

  };

  uWS::TemplatedApp<false>::WebSocketBehavior<UserData> wsb = {
    /* Just a few of the available handlers */
    .open = [](auto *ws) {
      /* MQTT syntax */
      ws->subscribe("sensors/+/house");
    },.message = [](auto *ws,std::string_view message,uWS::OpCode opCode) {
      ws->send(message,opCode);
    }
  };

  uWS::App().ws<UserData>("/*",std::move(wsb)).listen(9001,[](auto *listenSocket) {
      if (listenSocket) {
          std::cout << "Listening on port " << 9001 << std::endl;
      }
  }).run();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。