Boost :: ошибка функции неоднозначной перегрузки для оператора [] - PullRequest
3 голосов
/ 26 февраля 2010

Я получаю полную ошибку:

error: ambiguous overload for ‘operator[]’ in ‘a[boost::_bi::storage4<A1, A2, A3,     
boost::arg<I> >::a4_ [with A1 = boost::_bi::value<MsgProxy*>, A2 = boost::arg<1>, A3 = 
boost::arg<2>, int I = 3]]’

Он ссылается на строку 116 моего класса, который является вызовом boost :: bind в этой функции:

// Dispatch a message onto all connected clients
void MsgProxy::dispatch_msg(t_ic_msg_shptr message) {
    deque<t_socket_shptr>::const_iterator iter = clientList_.begin();

    for(; iter != clientList_.end(); ++iter) {
        message->async_send(*iter,
                boost::bind(&MsgProxy::handle_dispatch, this, _1, _2, _3));
    }
}

Для справки, функция отправки дескриптора выглядит следующим образом:

// Called to handle result of saync_send command in dispatch_msg
void MsgProxy::handle_dispatch(t_ic_msg_shptr messsage, t_socket_shptr socket_ptr, 
                   const boost::system::error_code &error) {
    if (error) {
    RDEBUG("Error forwarding message onto clients -- %s",
           error.message().c_str());
    }
}

И, наконец, вызываемая функция async_send:

void async_send        (t_socket_shptr, t_icsend_callback);

Где t_icsend_callback:

typedef boost::function<void (t_socket_shptr, const boost::system::error_code&)> 
                                                              t_icsend_callback;

По сути, у меня есть функция (async_send), которая принимает сокет для отправки сообщения, а также обратный вызов (определенный с помощью boost :: function) для сообщения о состоянии асинхронно. Я пытаюсь привязать член к этому аргументу boost :: function, но boost, похоже, не нравится то, что я здесь делаю. Я работал вверх и вниз по документам boost :: function и boost: bind, и мне кажется, это должно сработать ... У меня даже есть вызов, который почти идентичен чуть дальше, который не выдает ошибку ... раскрась озадачен.

1 Ответ

2 голосов
/ 26 февраля 2010

t_icsend_callback - функция, принимающая 2 агента.

boost::bind(&MsgProxy::handle_dispatch, this, _1, _2, _3)

возвращает функцию, которая принимает 3 аргумента.

Я думаю, что вы хотите сказать

   message->async_send(*iter,
            boost::bind(&MsgProxy::handle_dispatch, this, message, _1, _2));

(отметьте «сообщение» в качестве первого ограниченного аргумента).

...