无法编译 boost::asio::basic_datagram_socket<boost::asio::ip::udp>::basic_datagram_socket()
Cannot compile boost::asio::basic_datagram_socket<boost::asio::ip::udp>::basic_datagram_socket()
我正在尝试创建一个合适的udpServer类,该类将成为我的udpServerBoost的父级。(udp服务器未实现 atm(
而且由于我尝试更改我的类构造函数,让它自己创建io_service,因此在编译 src 时出现错误
src/UdpServerBoost.cpp: In constructor ‘UdpServerBoost::UdpServerBoost()’:
src/UdpServerBoost.cpp:44:32: error: no matching function for call to ‘boost::asio::basic_datagram_socket<boost::asio::ip::udp>::basic_datagram_socket()’
UdpServerBoost::UdpServerBoost()
^
In file included from /usr/include/boost/asio.hpp:21:0,
from src/UdpServerBoost.hpp:9,
from src/UdpServerBoost.cpp:1:
/usr/include/boost/asio/basic_datagram_socket.hpp:183:3: note: candidate: template<class Protocol1, class DatagramSocketService1> boost::asio::basic_datagram_socket<Protocol, DatagramSocketService>::basic_datagram_socket(boost::asio::basic_datagram_socket<Protocol1, DatagramSocketService1>&&, typename std::enable_if<std::is_convertible<_U1, _T1>::value>::type*)
basic_datagram_socket(
^
/usr/include/boost/asio/basic_datagram_socket.hpp:183:3: note: template argument deduction/substitution failed:
src/UdpServerBoost.cpp:44:32: note: candidate expects 2 arguments, 0 provided
UdpServerBoost::UdpServerBoost()
^
In file included from /usr/include/boost/asio.hpp:21:0,
from src/UdpServerBoost.hpp:9,
from src/UdpServerBoost.cpp:1:
/usr/include/boost/asio/basic_datagram_socket.hpp:147:3: note: candidate: boost::asio::basic_datagram_socket<Protocol, DatagramSocketService>::basic_datagram_socket(boost::asio::basic_datagram_socket<Protocol, DatagramSocketService>&&) [with Protocol = boost::asio::ip::udp; DatagramSocketService = boost::asio::datagram_socket_service<boost::asio::ip::udp>]
basic_datagram_socket(basic_datagram_socket&& other)
^
/usr/include/boost/asio/basic_datagram_socket.hpp:147:3: note: candidate expects 1 argument, 0 provided
/usr/include/boost/asio/basic_datagram_socket.hpp:129:3: note: candidate: boost::asio::basic_datagram_socket<Protocol, DatagramSocketService>::basic_datagram_socket(boost::asio::io_service&, const protocol_type&, const native_handle_type&) [with Protocol = boost::asio::ip::udp; DatagramSocketService = boost::asio::datagram_socket_service<boost::asio::ip::udp>; boost::asio::basic_datagram_socket<Protocol, DatagramSocketService>::protocol_type = boost::asio::ip::udp; boost::asio::basic_datagram_socket<Protocol, DatagramSocketService>::native_handle_type = int]
basic_datagram_socket(boost::asio::io_service& io_service,
^
/usr/include/boost/asio/basic_datagram_socket.hpp:129:3: note: candidate expects 3 arguments, 0 provided
/usr/include/boost/asio/basic_datagram_socket.hpp:108:3: note: candidate: boost::asio::basic_datagram_socket<Protocol, DatagramSocketService>::basic_datagram_socket(boost::asio::io_service&, const endpoint_type&) [with Protocol = boost::asio::ip::udp; DatagramSocketService = boost::asio::datagram_socket_service<boost::asio::ip::udp>; boost::asio::basic_datagram_socket<Protocol, DatagramSocketService>::endpoint_type = boost::asio::ip::basic_endpoint<boost::asio::ip::udp>]
basic_datagram_socket(boost::asio::io_service& io_service,
^
/usr/include/boost/asio/basic_datagram_socket.hpp:108:3: note: candidate expects 2 arguments, 0 provided
/usr/include/boost/asio/basic_datagram_socket.hpp:86:3: note: candidate: boost::asio::basic_datagram_socket<Protocol, DatagramSocketService>::basic_datagram_socket(boost::asio::io_service&, const protocol_type&) [with Protocol = boost::asio::ip::udp; DatagramSocketService = boost::asio::datagram_socket_service<boost::asio::ip::udp>; boost::asio::basic_datagram_socket<Protocol, DatagramSocketService>::protocol_type = boost::asio::ip::udp]
basic_datagram_socket(boost::asio::io_service& io_service,
^
/usr/include/boost/asio/basic_datagram_socket.hpp:86:3: note: candidate expects 2 arguments, 0 provided
/usr/include/boost/asio/basic_datagram_socket.hpp:69:12: note: candidate: boost::asio::basic_datagram_socket<Protocol, DatagramSocketService>::basic_datagram_socket(boost::asio::io_service&) [with Protocol = boost::asio::ip::udp; DatagramSocketService = boost::asio::datagram_socket_service<boost::asio::ip::udp>]
explicit basic_datagram_socket(boost::asio::io_service& io_service)
^
/usr/include/boost/asio/basic_datagram_socket.hpp:69:12: note: candidate expects 1 argument, 0 provided
src/UdpServerBoost.cpp:47:70: error: no matching function for call to ‘boost::asio::basic_datagram_socket<boost::asio::ip::udp>::basic_datagram_socket(boost::asio::io_service*, boost::asio::ip::udp::endpoint)’
socket_ = udp::socket(&io_service, udp::endpoint(udp::v4(), 1300));
^
In file included from /usr/include/boost/asio.hpp:21:0,
from src/UdpServerBoost.hpp:9,
from src/UdpServerBoost.cpp:1:
/usr/include/boost/asio/basic_datagram_socket.hpp:183:3: note: candidate: template<class Protocol1, class DatagramSocketService1> boost::asio::basic_datagram_socket<Protocol, DatagramSocketService>::basic_datagram_socket(boost::asio::basic_datagram_socket<Protocol1, DatagramSocketService1>&&, typename std::enable_if<std::is_convertible<_U1, _T1>::value>::type*)
basic_datagram_socket(
^
/usr/include/boost/asio/basic_datagram_socket.hpp:183:3: note: template argument deduction/substitution failed:
src/UdpServerBoost.cpp:47:70: note: mismatched types ‘boost::asio::basic_datagram_socket<Protocol1, DatagramSocketService1>’ and ‘boost::asio::io_service*’
socket_ = udp::socket(&io_service, udp::endpoint(udp::v4(), 1300));
^
In file included from /usr/include/boost/asio.hpp:21:0,
from src/UdpServerBoost.hpp:9,
from src/UdpServerBoost.cpp:1:
/usr/include/boost/asio/basic_datagram_socket.hpp:147:3: note: candidate: boost::asio::basic_datagram_socket<Protocol, DatagramSocketService>::basic_datagram_socket(boost::asio::basic_datagram_socket<Protocol, DatagramSocketService>&&) [with Protocol = boost::asio::ip::udp; DatagramSocketService = boost::asio::datagram_socket_service<boost::asio::ip::udp>]
basic_datagram_socket(basic_datagram_socket&& other)
^
/usr/include/boost/asio/basic_datagram_socket.hpp:147:3: note: candidate expects 1 argument, 2 provided
/usr/include/boost/asio/basic_datagram_socket.hpp:129:3: note: candidate: boost::asio::basic_datagram_socket<Protocol, DatagramSocketService>::basic_datagram_socket(boost::asio::io_service&, const protocol_type&, const native_handle_type&) [with Protocol = boost::asio::ip::udp; DatagramSocketService = boost::asio::datagram_socket_service<boost::asio::ip::udp>; boost::asio::basic_datagram_socket<Protocol, DatagramSocketService>::protocol_type = boost::asio::ip::udp; boost::asio::basic_datagram_socket<Protocol, DatagramSocketService>::native_handle_type = int]
basic_datagram_socket(boost::asio::io_service& io_service,
^
/usr/include/boost/asio/basic_datagram_socket.hpp:129:3: note: candidate expects 3 arguments, 2 provided
/usr/include/boost/asio/basic_datagram_socket.hpp:108:3: note: candidate: boost::asio::basic_datagram_socket<Protocol, DatagramSocketService>::basic_datagram_socket(boost::asio::io_service&, const endpoint_type&) [with Protocol = boost::asio::ip::udp; DatagramSocketService = boost::asio::datagram_socket_service<boost::asio::ip::udp>; boost::asio::basic_datagram_socket<Protocol, DatagramSocketService>::endpoint_type = boost::asio::ip::basic_endpoint<boost::asio::ip::udp>]
basic_datagram_socket(boost::asio::io_service& io_service,
^
/usr/include/boost/asio/basic_datagram_socket.hpp:108:3: note: no known conversion for argument 1 from ‘boost::asio::io_service*’ to ‘boost::asio::io_service&’
/usr/include/boost/asio/basic_datagram_socket.hpp:86:3: note: candidate: boost::asio::basic_datagram_socket<Protocol, DatagramSocketService>::basic_datagram_socket(boost::asio::io_service&, const protocol_type&) [with Protocol = boost::asio::ip::udp; DatagramSocketService = boost::asio::datagram_socket_service<boost::asio::ip::udp>; boost::asio::basic_datagram_socket<Protocol, DatagramSocketService>::protocol_type = boost::asio::ip::udp]
basic_datagram_socket(boost::asio::io_service& io_service,
^
/usr/include/boost/asio/basic_datagram_socket.hpp:86:3: note: no known conversion for argument 1 from ‘boost::asio::io_service*’ to ‘boost::asio::io_service&’
/usr/include/boost/asio/basic_datagram_socket.hpp:69:12: note: candidate: boost::asio::basic_datagram_socket<Protocol, DatagramSocketService>::basic_datagram_socket(boost::asio::io_service&) [with Protocol = boost::asio::ip::udp; DatagramSocketService = boost::asio::datagram_socket_service<boost::asio::ip::udp>]
explicit basic_datagram_socket(boost::asio::io_service& io_service)
^
/usr/include/boost/asio/basic_datagram_socket.hpp:69:12: note: candidate expects 1 argument, 2 provided
我已经用 g++ 编译了提升库并且它起作用了。所以我知道问题不是来自它:(
所以这是我的来源!感谢您阅读^^
有好的一天
这是我的udpServerBoost.cpp
UdpServerBoost::UdpServerBoost()
{
boost::asio::io_service io_service;
socket_ = udp::socket(&io_service, udp::endpoint(udp::v4(), 1300));
memset(&recv_buffer_, 0, 2048);
clientList_ = std::vector<ClientBoost>();
startReceive();
io_service.run();
}
和 .hpp
class UdpServerBoost
{
public:
UdpServerBoost();
~UdpServerBoost() {};
private:
void startReceive();
void handleReceive(const boost::system::error_code &error,
std::size_t bytes_transferred);
void handleSend(boost::shared_ptr<std::string> /*message*/,
const boost::system::error_code & /*error*/,
std::size_t /*bytes_transferred*/);
ClientBoost getClient();
void treatMessage(std::string mess);
void sendToClient(ClientBoost client, std::string mess);
std::vector<ClientBoost> clientList_;
udp::socket socket_;
udp::endpoint remote_endpoint_;
boost::array<char, 2048> recv_buffer_;
};
您默认构造套接字。这是不允许的。您必须至少提供对其执行程序 (io_service( 的引用。
尝试这样的事情:
class UdpServerBoost
{
UdpServerBoost();
boost::asio::io_service my_io_service_;
udp::socket my_socket_;
};
UdpServerBoost::UdpServerBoost()
: my_io_service_()
, my_socket_(my_io_service_)
{
}
相关文章:
- 如何在Visual Basic中使用矩形函数OpenGL绘制矩形
- C/C++:socket() 创建在循环中失败,打开的文件太多
- 这是 basic.def.odr 部分的缺陷吗?
- 不将数据 socket.io c++(客户端)发送到 nodejs(服务器)socket.io
- 通过 Tor 服务C++ socket.io 客户端
- 未定义的对象(〔basic.life〕/8):为什么允许引用重新绑定(和常量修改)
- 操作系统 (Linux) 在使用 boost::asio::generic::raw_protocol::socket
- Make zmqpp::socket::connect a std::future
- 为什么可以重复使用这个boost::asio::tcp::socket
- 如何从 boost::asio::ssl::stream<boost::asio::ip::tcp::socket> 获取本机套接字文件描述器?
- Socket.io客户端C++,从Socket.on获取数组
- C++标准在[basic.scope.hiding]中"same scope"到底意味着什么?
- 调用socket.remote_endpoint(提升 asio 库)线程安全性
- 如何使用已经存在的 tcp::socket 创建 tcp::iostream?
- 节点.js到 c++ 客户端:不接收来自 socket.emit 的消息
- 将 std::bind 应用于带有参数 <boost::asio::ip::tcp::socket> 时出错?
- 为什么我们需要 [basic.scope.class]/2?
- [basic.lookup]/1 中最后一句话是什么意思?
- 我可以在不包含 <sys/socket.h> 的情况下使用 C 套接字吗?
- 如何使用C 在socket.io中接收数据