错误 C2039:'serialize':不是矢量类型的成员
error C2039: 'serialize' : is not a member of vector type
#include<iostream>
#include<boost/thread.hpp>
#include<vector>
#include<boost/asio.hpp>
#include <ctime>
#include <string>
#include <boost/serialization/vector.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <sstream>
using boost::asio::ip::tcp;
std::string make_daytime_string()
{
using namespace std; // For time_t, time and ctime;
time_t now = time(0);
return ctime(&now);
}
class maintain_overlay{
public:
maintain_overlay():thread_(boost::bind(&maintain_overlay::member_list_server, this))
{
thread_.join();
}
void member_list_server(){
boost::asio::io_service io_service;
tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), 13));
for (;;)
{
tcp::socket socket(io_service);
acceptor.accept(socket);
member_list.push_back(socket.remote_endpoint());
std::string message = make_daytime_string();
std::stringstream ss;
boost::archive::text_oarchive oa(ss);
oa<<member_list;/////////////error comes because of this code
boost::system::error_code ignored_error;
boost::asio::write(socket, boost::asio::buffer(message),
boost::asio::transfer_all(), ignored_error);
}
}
private:
std::vector<tcp::endpoint> member_list;
boost::thread thread_;
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & member_list;
}
};
我得到错误
error C2039: 'serialize' : is not a member of 'boost::asio::ip::basic_endpoint<InternetProtocol>'
——编辑——
我认为我正在犯的一个错误是,我试图序列化成员数据,而不是整个对象实例…如果我想序列化member_list向量,我应该如何以及在哪里声明序列化方法?
问题是您正在尝试序列化vector<tcp::endpoint>
,但tcp::endpoint
不可序列化。
如果您只想发送连接的IP地址和端口,那么您必须从tcp::endpoint
中提取它们或编写自己的序列化/反序列化方法。
你可以像这样以一种非侵入式的方式重载boost的序列化函数:
namespace boost {
namespace serialization {
template<class Archive, class Protocol>
void save(Archive & ar, asio::ip::basic_endpoint<Protocol> & e, unsigned int version)
{
string ip = e.address().to_string();
short port = e.port();
ar & ip;
ar & port;
}
template<class Archive, class Protocol>
void load(Archive & ar, asio::ip::basic_endpoint<Protocol> & e, unsigned int version)
{
string ip;
short port;
ar & ip;
ar & port;
e = asio::ip::basic_endpoint<Protocol>(ip, port);
}
template<class Archive, class Protocol>
inline void serialize(Archive & ar, asio::ip::basic_endpoint<Protocol> & e, const unsigned int file_version) {
split_free(ar, e, file_version);
}
}
}
相关文章:
- 访问C++中的类型成员
- 具有 STL 向量类型成员的类的复制内存
- 重载具有 2 个相同数据类型成员的构造函数
- std::void_t 和嵌套的非类型成员
- 返回对常量结构(指针类型)成员的引用:明显的左值到右值转换
- 使用各种数据类型成员创建对象的简便方法
- 将类类型成员定义为公共和私有之间有什么区别?
- 结构类型成员的默认构造函数中的默认参数
- 如何传递模板模板非类型成员函数指针
- 文本类类型成员函数约束
- 给定仅包含布尔类型成员的结构的两个对象 s1 和 s2,只要 s1 的成员为 true,请检查 s2 的每个成员是否为真
- 如何在 c++ 中使用二进制文件输入/输出读取/写入结构的字符串类型成员
- C++:将模板参数的模板类型成员加为好友的语法正确吗
- C++静态结构类型成员初始化
- C++:作为引用或指针的基类型成员变量
- 左值引用类型成员的用户定义移动构造函数
- 具有指针类型成员的类在 MSVS2012@debug 下销毁时失败.程序错误或错误源
- CRTP -- 访问不完整的类型成员
- 为什么C++默认初始化不对非类类型成员进行零初始化
- 请求非类类型成员