我有一个带有一些类代码的 .h 文件 - overlay.h
#include<iostream>
#include<boost/thread.hpp>
#include<vector>
#include<boost/asio.hpp>
#include <string>
#include <boost/serialization/vector.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <sstream>
#include <boost/tuple/tuple.hpp>
#include<member.h>
using boost::asio::ip::tcp;
class overlay_server{...};
struct member{
std::string ip_address;
short int port;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & ip_address;
ar & port;
}
};
现在我将结构移动到另一个名为 member.h 的新文件中并包含该文件,以便我的类 overlay_server 可以使用它。现在,当我构建程序时,我得到了错误。
我应该进行哪些更改才能完成这项工作?我在 SO 上阅读了有关标头保护的信息,但无法真正理解如何在这里实现它来解决问题。
- - 编辑 - -
成员.h
struct member{
std::string ip_address;
short int port;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & ip_address;
ar & port;
}
};
运行.cpp
#include<overlay_server.h>
#include<overlay_client.h>
int main(){
overlay_server overlay_server_(8002);
boost::thread thread_(boost::bind(&overlay_server::member_list_server, overlay_server_));
overlay_client overlay_client_("127.0.0.1",8002);
overlay_client_.member_list_client();
thread_.join();
}
我没有在任何地方重新定义结构。我有另一个名为 overlay_client 的类,它也使用 struct 成员。
在我的主要功能中,我创建了overlay_server 和overlay_client 的对象。现在我的程序只有当 member.h 包含在 overlay_server.h 中时才运行(尽管 overlay_server 和 overly_client 中的代码都需要它)如果它包含在两者中,那么我会收到重新定义错误
为什么?
- - 编辑 - -
我的 member.h 中的这段代码解决了 编译错误“'struct' type redefinition”的问题,尽管它是它的第一个定义