ошибка boost :: asio async_send - PullRequest
1 голос
/ 21 мая 2011

Следующий код, использующий boost :: asio, не будет компилироваться:

#pragma once
#include <ctime>
#include <iostream>
#include <string>
#include <stdint.h>
#include <boost/bind.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/enable_shared_from_this.hpp>
#include <boost/asio.hpp>

class Connection
: public boost::enable_shared_from_this<Connection>
{
public:
  typedef boost::shared_ptr<Connection> pointer;
  static pointer create(boost::asio::io_service& io_service){return pointer(new Connection(io_service));}
  virtual ~Connection();
  boost::asio::ip::tcp::socket& socket();

  virtual void Send(uint8_t* buffer, int length);
  void handler(const boost::system::error_code& error, std::size_t bytes_transferred );

private:
  explicit Connection(boost::asio::io_service& io_service);
  boost::asio::ip::tcp::socket socket_;
  boost::asio::ip::tcp::endpoint remote_endpoint_;
};


------------------------------------------------------------------------------------------------
#include "Connection.h"

Connection::Connection(boost::asio::io_service& io_service)
    : socket_(io_service)
  {
  }

Connection::~Connection()
{
    //dtor
}


boost::asio::ip::tcp::socket& Connection::socket(){
    return socket_;
}

void Connection::Send(uint8_t* buffer, int length){
    socket_.async_send(boost::asio::buffer(buffer, length), 0, handler);

}
                 // Result of operation.               // Number of bytes sent.
void Connection::handler(const boost::system::error_code& error, std::size_t bytes_transferred ){
  }

Это ошибки, которые этот код создает в Visual C ++:

Error   1   error C3867: 'Connection::handler': function call missing argument list; use '&Connection::handler' to create a pointer to member   d:\c++\ugs\accountserver\connection.cpp 19
Error   2   error C2780: 'void boost::asio::basic_stream_socket<Protocol>::async_send(const ConstBufferSequence &,WriteHandler)' : expects 2 arguments - 3 provided d:\c++\ugs\accountserver\connection.cpp 19

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

Ответы [ 2 ]

4 голосов
/ 21 мая 2011
Error   1   error C3867: 'Connection::handler': function call missing argument list; use '&Connection::handler' to create a pointer to member   d:\c++\ugs\accountserver\connection.cpp 19

Эта первая ошибка говорит вам, что: Чтобы получить «адрес» функции-члена, вам нужно использовать следующий синтаксис:

&Connection::handler

Error   2   error C2780: 'void boost::asio::basic_stream_socket<Protocol>::async_send(const ConstBufferSequence &,WriteHandler)' : expects 2 arguments - 3 provided d:\c++\ugs\accountserver\connection.cpp 19

Вторая ошибка говорит о несоответствии количества аргументов, передаваемых функции

Таким образом, правильный способ вызова async_send это

socket_.async_send(boost::asio::buffer(buffer, length), boost::bind(&Connection::handler, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
2 голосов
/ 21 мая 2011

Ваш вызов async_send должен выглядеть следующим образом:

socket_.async_send(boost::asio::buffer(buffer, length), boost::bind(&Connection::handler, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
...