使用Visual Studio增强asio TCP IP asio类编译错误。错误:C2228:'。close'的左边必须有class / struct / union

时间:2013-01-24 12:55:02

标签: c++ class boost tcp boost-asio

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

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);

感谢您的任何努力。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

我还发现了该编译错误,但是从以下角度出发:

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

与正确的相比:

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

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

将来,我建议在运行时将null检查用于boost类型的args。