[英]Boost asio TCP IP asio class compile error with Visual Studio. Error: C2228: left of '.close' must have class/struct/union
我正在嘗試按照此頁面中提供的步驟進行操作
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);
感謝您的任何努力。
要初始化tcpsock
與類型io_service
,而不是與變量io_tcp
。
我也發現了這個編譯錯誤,但從不同的角度給出了以下內容:
boost::asio::read(socket, replyBuf, boost::asio::transfer_all(), error);
與正確的相比:
boost::asio::read(*socket, replyBuf, boost::asio::transfer_all(), error);
請注意需要取消引用套接字。 似乎 boost 使用常見的基本類型可以防止常見的智能感知錯誤。
將來,我建議在運行時為 boost 類型的參數使用之前添加空檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.