簡體   English   中英

使用 Visual Studio Boost asio TCP IP asio 類編譯錯誤。 錯誤:C2228:“.close”的左邊必須有類/結構/聯合

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM