【发布时间】:2013-06-19 15:09:55
【问题描述】:
我知道这是一个关于 C++ 的常见问题,但按照其他答案等的建议,我仍然无法让我看似简单的代码工作。我的问题是下面的代码给出了“错误:'class Communicator'的重新定义”:
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 文件也包含标头,但是对于守卫,我不明白为什么这很重要。
感谢您对此的任何帮助,非常感谢。
编辑:另外,我的 runner.cpp 文件(带有 main)包含 global.h 以便访问通信器全局对象。
【问题讨论】:
-
您的标题显示“类 Communicator”,您的 cpp 文件显示“类 Communicator”,而您的错误显示“重新定义‘类 Communicator’”。这很公平。
标签: c++ redefinition