これは C++ に関するよくある質問ですが、他の回答などのアドバイスに従っても、一見単純なコードを動作させることができません。私の問題は、次のコードで「エラー: 'class Communicator' の再定義」が発生することです。
グローバル.h
#ifndef GLOBAL_H
#define GLOBAL_H
class object_payload;
class pending_frame;
class Communicator {
private:
map<string,object_payload*> local_objects;
map<string,pending_frame*> remote_tasks;
bool listening;
public:
Communicator();
void stop_listening();
void add_to_remote_tasks(string name, pending_frame* pfr);
void listen();
void distributed_release(string task_name);
};
extern Communicator communicator;
#endif
グローバル.cpp
#include "global.h"
class Communicator {
private:
map<string,object_payload*> local_objects;
map<string,pending_frame*> remote_tasks;
bool listening;
public:
Communicator(){
// implementation
}
void stop_listening(){
// implementation
}
void add_to_remote_tasks(string name, pending_frame* pfr){
// implementation
}
void listen(){
// implementation
}
void distributed_release(string task_name){
// implementation
}
};
Communicator communicator;
なぜこのエラーが発生するのか誰にもわかりますか? .cpp にはヘッダーが含まれています。ヘッダーも含む他の .cpp ファイルがありますが、ガードを使用すると、それが問題になる理由がわかりません。
これについてご協力いただきありがとうございます。
EDIT:また、私のrunner.cppファイル(メインを含む)には、コミュニケーターグローバルオブジェクトにアクセスするためにglobal.hが含まれています。