C++ Visual Studio中的Boost asio TCP IP asio类编译错误。错误:C2228:位于';的左侧;。关闭';必须具有类/结构/联合

C++ Visual Studio中的Boost asio TCP IP asio类编译错误。错误:C2228:位于';的左侧;。关闭';必须具有类/结构/联合,c++,class,boost,tcp,boost-asio,C++,Class,Boost,Tcp,Boost Asio,我试图按照本页提供的步骤进行操作 但是,在某些时候,代码无法编译,并给出了指定的错误。我不明白这是什么样的冲突。对象tcpsock似乎没有正确创建。请检查我的代码: io_service io_tcp; tcp::resolver resolverObject(io_tcp); tcp::resolver::query queryObject(argv[1], "daytime"); tcp::resolver::iterator endpoint_iterator = resolverObj

我试图按照本页提供的步骤进行操作

但是,在某些时候,代码无法编译,并给出了指定的错误。我不明白这是什么样的冲突。对象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\u服务
而不是变量
io\u tcp
初始化
tcpsock

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

    boost::asio::read(socket, replyBuf, boost::asio::transfer_all(), error);
与正确答案相比:

boost::asio::read(*socket, replyBuf, boost::asio::transfer_all(), error);
请注意,需要取消对套接字的引用。 boost使用公共基类型似乎可以防止常见的intellisense错误


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

多么愚蠢的错误!看见现在两个小时都浪费在一个愚蠢的错误上了!非常感谢。在下面的示例中,重命名变量时可能会很棘手;-)同意!我会尽量多加小心的。再次感谢:)