クラスコードを含む.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;
}
};
run.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という別のクラスがあります。
メイン関数では、overlay_server と overlay_client の両方のオブジェクトを作成します。私のプログラムは、member.h が overlay_server.h に含まれている場合にのみ実行されます (ただし、overlay_server と overly_client の両方のコードで必要です)。両方に含まれている場合、再定義エラーが発生します。
なぜ?
- - 編集 - -
私のmember.hのこのコードは、 コンパイルエラー「 'struct' type redefinition」の問題を解決しますが、それは最初の定義です