【发布时间】:2012-03-16 11:02:15
【问题描述】:
我有一个 Object 基类,还有几个派生类,分别称为 Item、Person 和 Location。
因为这些都是从 Object 派生的,所以我需要在它们的每个头文件中包含 Object.h,并且我在我的 main 中包含所有派生类。
因为我正在这样做,所以我收到了重新定义错误。
我想知道包含这些文件以避免此错误的正确方法是什么?
谢谢!
编辑:
object.h
using namespace std;
class Object{
string name;
string description;
public:
Object();
Object(string name, string description);
void set_name(string name);
void set_description(string description);
string get_name();
string get_description();
~Object();
};
item.h
using namespace std;
#include "object.h"
class Item : public Object{
public:
Item();
Item(string name, string description);
};
locale.h
using namespace std;
#include "object.h"
class Locale : public Object{
public:
Locale();
Locale(string name, string description);
};
main.cpp
#include <iostream>
#include <string>
#include "locale.h"
#include "item.h"
using namespace std;
int main(){
return 0;
}
【问题讨论】:
-
exact 错误信息是什么?请展示您的代码的(简化)版本。
-
确切的错误信息是“重新定义对象”
-
好的,你需要展示一些代码。首先查看sscce.org(这是关于将您的代码简化为堆栈溢出的最佳格式)。
-
我知道是什么导致了错误。 object.h 被定义了两次。我想知道在这种情况下包含头文件的正确格式是什么。
-
请不要在头文件中导入命名空间 - 这是一个相当有侵略性的事情,每个包含该头文件的文件都会自动导入整个命名空间。
标签: c++ header-files redefinition