Boost asio TCP IP asio class compile error with Visual Studio.错误:C2228:'.close'左侧必须具有类/结构/联合

Boost asio TCP IP asio class compile error with Visual Studio. Error: C2228: left of '.close' must have class/struct/union

本文关键字:asio 联合 结构 close TCP Studio Visual with error 错误 class      更新时间:2023-10-16

>我正在尝试按照此页面中提供的步骤进行操作

http://www.boost.org/doc/libs/1_46_0/doc/html/boost_asio/tutorial/tutdaytime1.html

但是,在某些时候代码无法编译,并给了我指定的错误。我不明白这是什么样的冲突。对象 tcpsock 似乎没有正确创建。请检查我的代码:

io_service io_tcp;
tcp::resolver resolverObject(io_tcp);
tcp::resolver::query queryObject(argv[1], "daytime");
tcp::resolver::iterator endpoint_iterator = resolverObject.resolve(queryObject);
tcp::resolver::iterator end; //default constructor is end iterator
tcp::socket tcpsock(io_service);
boost::system::error_code socketError = boost::asio::error::host_not_found;
while (socketError && endpoint_iterator != end)
{
    //Apparently, the object isn't created correctly
    tcpsock.close(); //error happenes here
    tcpsock.connect(*endpoint_iterator++, socketError); //error happenes here too
}
if (socketError)
    throw boost::system::system_error(socketError);

感谢您的任何努力。

您正在使用类型 io_service 而不是变量 io_tcp 初始化tcpsock

我也发现了这个编译错误,但从不同的角度给出以下内容:

    boost::asio::read(socket, replyBuf, boost::asio::transfer_all(), error);

与正确的相比:

boost::asio::read(*socket, replyBuf, boost::asio::transfer_all(), error);

请注意需要取消引用套接字。似乎boost使用常见的基本类型可以防止通常的智能感知错误。

将来,我建议在运行时对 boost 类型的参数使用之前添加一个空检查。