Ошибка с lib boost asio 1.47.0 в файле basic_socket.hpp - PullRequest
4 голосов
/ 10 ноября 2011

У меня есть ошибка в следующем коде, когда я пытался скомпилировать это:

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(), но эта функция возвращает ссылку на экземпляр сокета:

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

так что я не нашел никакого решения в сети: (

У кого-нибудь есть идеи, плз?

Ответы [ 2 ]

2 голосов
/ 14 ноября 2012

У меня тоже была эта проблема, и я провожу несколько часов, чтобы посмотреть, что случилось.Мой случай был:

  • Класс A, который содержит гнездо повышения.Класс A использовался в качестве члена класса B.
  • Класс B был указателем и не подлежал копированию.Элемент A был объявлен в качестве ссылки в классе B.

Исходный код в классе B:

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

Проблема была исправлена ​​(и, конечно,) с помощьюадрес a_instance:

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

Я не заметил этого, и я потратил некоторое время, чтобы решить это.Я надеюсь, что это поможет и другим.

2 голосов
/ 10 ноября 2011

async_accept - это то, что вы написали сами?Если это так, убедитесь, что он передает ссылку на сокет, а не передает по значению.Ошибка, которую вы получаете, говорит о том, что вы пытаетесь скопировать конструкцию, а конструктор копирования объявлен как закрытый (это способ C ++ обеспечить, что класс не поддерживает копирование).

...