簡體   English   中英

文件basic_socket.hpp中的lib boost asio 1.47.0出錯

[英]Error with lib boost asio 1.47.0 in file basic_socket.hpp

我嘗試編譯時,在以下代碼中有錯誤:

void        Server::accept(void)
{
    Network::ptr connection = Network::initialize(this->my_acceptor.get_io_service());
    this->my_acceptor.async_accept(connection->socket(), bind(&Server::endCmd, this, *connection, placeholders::error));
}

void        Server::endCmd(Network connection, const boost::system::error_code& error)
{
    if (!error)
        {
            std::cout << "success!" << std::endl;
            connection.start();
            this->accept();
        }
}

VC ++ 2010告訴我以下錯誤:

Error   1   error C2248: 'boost::asio::basic_io_object<IoObjectService>::basic_io_object' : cannot access private member declared in class 'boost::asio::basic_io_object<IoObjectService>'

我知道這個錯誤來到這一行,因為當我評論它,錯誤消失...經過一些研究,它可能與套接字的類,當我調用connection->getSocket()但這個函數返回一個ref實例的套接字:

tcp::socket& Network::socket(void)
{
    return (this->my_socket);
}

所以我沒有在網上找到任何解決方案:(

有人有想法嗎?

我也有這個問題,我花了幾個小時看看發生了什么。 我的情況是:

  • A類,包含一個升壓插座。 A類它被用作B類的成員。
  • B類是一個指針,它不可復制。 成員A被宣布為B類的參考。

B類中的原始代碼是:

std::bind(&A::a_member, a_instance)

通過使用a_instance的地址修復了問題(當然):

std::bind(&A::a_member, &a_instance).

我沒注意到,我花了一些時間來解決這個問題。 我希望它也會幫助別人。

是async_accept你自己寫的東西嗎? 如果是這樣,請確保它對socket進行REFERENCE,而不是按值傳遞。 您得到的錯誤是說您正在嘗試復制構造,並且復制構造函數被聲明為私有(這是C ++強制該類不支持復制的方式)。

暫無
暫無

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

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