簡體   English   中英

從 boost::asio 開始:使用 io_context 時遇到問題

[英]Beginning on boost::asio : Having problems using io_context

我一直在 c++ 中進行編碼,並想嘗試使用 boost asio 來創建 TCP 異步服務器。

我閱讀了 boost 提供的文檔,並使用 boost 1.75 嘗試編寫此服務器的代碼。

但是,我似乎不明白如何使用文檔中的 io_context 。

當我為第 3 天編譯代碼時:異步 TCP 日間服務器( 此鏈接在 boost 1.78 中但似乎與 1.75 沒有太大區別)我經常收到錯誤 io_context 由於它們的 inheritance 而無法復制execution_context,它繼承自noncopyable

所以我不明白如何編寫和編譯文檔代碼,因為它試圖在其中制作 io_context 的副本。

提前感謝您的任何回復。

編輯:我一直在編譯 C++ 17 上的代碼並使用柯南來管理升壓,我遇到的問題來自我嘗試將 io_context 復制到我的 class 的屬性的構造函數:

   class Server {
    public:
        Server(boost::asio::io_context& io_context) : _io_context(io_context), _acceptor(io_context, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), 13))
        {
            startAccept();
        }
        ~Server();
    private:
        void startAccept();
        void handleAccept(ConnectionHandler::pointer new_connection, const boost::system::error_code &error);
        boost::asio::io_context _io_context;
        boost::asio::ip::tcp::acceptor _acceptor;
};

這是我在示例中遇到的編譯錯誤:

    error: use of deleted function 
    ‘boost::asio::io_context::io_context(const boost::asio::io_context&)’17 | Server(boost::asio::io_context& io_context) : 
    _io_context(io_context), _acceptor(io_context, 
    boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), 13))

/home/romsnouk/.conan/data/boost/1.75.0/_/_/package/634391908be52704fdd5c332658475fe91ab3b1d/include/boost/asio/io_context.hpp:639:3: note: declared here
  639 |   io_context(const io_context&) BOOST_ASIO_DELETED;

問題? 當您嘗試初始化_io_context成員時,您復制了不可復制的io_context object。

_io_context成員需要是一個引用:

boost::asio::io_context& _io_context;
//                     ^
// Note ampersand, to make it a reference

這就是完整示例中所做的


當然要確保原始io_context object 的生命周期至少與您創建的Server object 一樣長。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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