Я знаю, что это часто задаваемый вопрос о C++, но, следуя советам других ответов и т. Д., Я все еще не могу заставить мой, казалось бы, простой код работать. Моя проблема заключается в следующем коде дает "ошибка: переопределение 'класса Communicator'":Переопределение класса после разделения на .h/.cpp
global.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
global.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 для доступа к глобальному объекту коммуникатора.
Ваш заголовок говорит «класс Communicator», ваш файл cpp говорит «class Communicator», и ваша ошибка говорит «переопределение« класса Communicator ». Это честно. – doctorlove