问题描述
我正在尝试使用 Qtcreator 编译此代码:
uWS::App().ws<PerSocketData>("/*",{
/* Settings */
.compression = uWS::DEDICATED_COMPRESSOR_3KB,.maxPayloadLength = 16 * 1024 * 1024,.idleTimeout = 10,.maxBackpressure = 1 * 1024 * 1024,/* Handlers */
.upgrade = nullptr,.open = [](auto *ws) {
/* Let's make every connection subscribe to the "broadcast" topic */
ws->subscribe("broadcast");
},.message = [](auto *ws,std::string_view message,uWS::OpCode opCode) {
/* Exit gracefully if we get a closedown message (ASAN debug) */
if (message == "closedown") {
/* Bye bye */
us_listen_socket_close(0,global_listen_socket);
ws->close();
}
/* Simply broadcast every single message we get */
ws->publish("broadcast",message,opCode,true);
},.drain = [](auto */*ws*/) {
/* Check getBufferedamount here */
},.ping = [](auto */*ws*/,std::string_view) {
},.pong = [](auto */*ws*/,.close = [](auto */*ws*/,int /*code*/,std::string_view /*message*/) {
/* We automatically unsubscribe from any topic here */
}
}).listen(9001,[](auto *listen_socket) {
global_listen_socket = listen_socket;
if (listen_socket) {
std::cout << "Listening on port " << 9001 << std::endl;
}
}).run();
并得到这个错误:
cannot convert '<brace-enclosed initializer list>' to 'uWS::TemplatedApp<false>::WebSocketBehaviormanagement::Websocket::Runner()::PerSocketData.
但是我在命令行中使用相同的编译器(arm-poky-linux-gnueabi-g++)成功编译了相同的代码。 怎么了? 无论如何,我将代码更改为此,它在 Qtcreator 中也编译得很好。
uWS::TemplatedApp<false>::WebSocketBehavior<PerSocketData> wsb = {
/* Settings */
.compression = uWS::SHARED_COMPRESSOR,.maxPayloadLength = 16 * 1024,/* Handlers */
.upgrade = nullptr,.open = [=](auto* ws) {
//std::cout << "connected" << std::endl;
is_there_stream = true;
//g_ws = ws;
},.message = [](auto* ws,uWS::OpCode opCode) {
//ws->send(message,true);
std::cout << message << std::endl;
},.drain = [](auto*/*ws*/) {
/* Check ws->getBufferedamount() here */
},// .ping = [](auto*/*ws*/) {
// /* Not implemented yet */
// },// .pong = [](auto*/*ws*/) {
// /* Not implemented yet */
// },.close = [=](auto*/*ws*/,std::string_view /*message*/) {
/* You may access ws->getUserData() here */
is_there_stream = false;
}
};
uWS::App().ws<PerSocketData>("/*",std::move(wsb)).get("/restart",[](auto* res,auto* req) {
//protocol->Restart();
}).listen(PORT,[](auto* listen_socket) {
if (listen_socket) {
std::cout << "Listening on port " << PORT << std::endl;
}
}).run();
现在编译没有问题,但我不知道发生了什么。加上 Qtcreator 从我评论的行中得到错误(乒乓/乒乓)。
error: Could not convert '<lambda closure object>management::Websocket::Runner()::<lambda(auto:14*)>{}' from 'management::Websocket::Runner()::<lambda(auto:14*)>' to 'uWS::MoveOnlyFunction<void(uWS::WebSocket<false,true,management::Websocket::Runner()::PerSocketData>*,std::basic_string_view<char>)>' {aka 'ofats::any_invocable<void(uWS::WebSocket<false,std::basic_string_view<char>)>'}
虽然有类似这样的代码(drain)。
为什么同一个编译器会显示这些不同的行为? 请帮助我理解这一点。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)