成员函数指针错误,boost绑定
error with member function pointers, boost bind
我在一个文件中编写了一个连接到服务器的客户端,没有任何类。这显然不是一种好的编程方式,所以当代码最终按照我想要的方式运行时,我用下面的client.h创建了myclient类:
#include <boost/asio.hpp>
#include <boost/array.hpp>
#include <iostream>
#include <string>
#include "mtbf.h"
#include <boost/date_time/posix_time/posix_time.hpp>
class myclient
{
public:
boost::asio::io_service io_service;
boost::asio::ip::tcp::resolver resolver;
boost::asio::ip::tcp::socket sock;
boost::array<char, 4096> buffer;
typedef boost::posix_time::time_duration duration_t;
typedef boost::posix_time::ptime timestamp_t;
std::vector<std::string> tokens;
boost::system::error_code m_err_feedback;
enum ConnectionState
{
WAIT_FOR_HEADER,
WAIT_FOR_DATA,
PACKET_COMPLETE
};
myclient(std::string port);
private:
void read_handler(const boost::system::error_code &ec, std::size_t bytes_transferred);
void connect_handler(const boost::system::error_code &ec);
void resolve_handler(const boost::system::error_code &ec, boost::asio::ip::tcp::resolver::iterator it);
};
我不写client.cpp的完整代码,但这里是错误发生的地方(构造函数)
myclient::myclient(std::string port):resolver(io_service),sock(io_service)
{
tcp::resolver::query query("127.0.0.1", port);
resolver.async_resolve(query, boost::bind(&myclient::resolve_handler, this));
io_service.run();
}
我是c++的新手,但我知道我需要一个boost::bind来调用
中成员函数的引用。 resolver.async_resolve(query, boost::bind(&myclient::resolve_handler, this));
但不知何故,这不是很正确,我得到一个错误:
error 8 error C2298: 'return': Invalid procedure for an expression with pointer to memberfunction C:projektelibsboost_1_53_0-VC11boostbindmem_fn.hpp 342 1 client
编辑:谢谢你的回复,但似乎还有更多的错误。我是不是漏掉了什么小事?下面是client.cpp中的代码(我删除了read_handler中的实际算法,因为它不重要)
#include "client.h"
using boost::asio::ip::tcp;
myclient::myclient(std::string port):resolver(io_service),sock(io_service)
{
tcp::resolver::query query("127.0.0.1", port);
resolver.async_resolve(query, boost::bind(&myclient::resolve_handler, this,boost::asio::placeholders::error,boost::asio::placeholders::iterator));
io_service.run();
}
void myclient::read_handler(const boost::system::error_code &ec, std::size_t bytes_transferred)
{
.
.
.
}
void myclient::connect_handler(const boost::system::error_code &ec)
{
if (!ec)
{
sock.async_read_some(boost::asio::buffer(buffer), boost::bind(&myclient::read_handler, this,&ec));
}
}
void myclient::resolve_handler(const boost::system::error_code &ec, boost::asio::ip::tcp::resolver::iterator it)
{
if (!ec)
{
sock.async_connect(*it, boost::bind(&myclient::connect_handler, this, &ec, it));
}
}
使用,我得到如下错误:
error 2 error C2825: "F": must be a class or namespace "::". C:projektelibsboost_1_53_0-VC11boostbindbind.hpp 69 1 client
error 3 error C2039: 'result_type': is not an element of '`global namespace'' C:projektelibsboost_1_53_0-VC11boostbindbind.hpp 69 1 client
您忘记了resolve_handler
参数的占位符:
boost::bind(&myclient::resolve_handler, this,
boost::asio::placeholders::error,
boost::asio::placeholders::iterator)
相关文章:
- Boost 绑定和"result_type":不是成员,对 c++03 友好
- ROS 订阅回调 - 使用 boost::绑定成员函数
- 当Boost ::绑定模板函数时,模板参数扣除/替换失败
- 使用boost ::绑定结果作为参数
- boost ::绑定发送变量的回调args到回调函数
- 传递 boost::绑定参数作为参数
- boost::绑定在存储时不保存部分参数
- boost::绑定静态函数的参数
- 使用 boost :: 绑定将映射作为参数传递
- boost::与boost:asio绑定在一起.boost::绑定后续
- boost::与boost:asio绑定在一起.boost::绑定不起作用,从示例中复制
- Boost绑定和Boost函数,将带有参数的函数存储在向量中,然后执行它们
- boost::绑定具有默认值的成员函数
- boost::绑定到类成员函数
- boost::绑定重载函数
- boost绑定或返回常量的lambda函数
- boost::绑定内部副本
- boost::绑定模板化的函子
- 使用boost绑定成员函数
- boost::绑定动态参数