2012-02-26 62 views
1

我有一个对象的基类,我有几个派生类称为项目,人员和位置。重复定义错误与多个派生类在主

因为每个这些都是从对象派生的,所以我需要在每个头文件中包含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; 
} 
+0

什么是*确切*错误信息?并且请显示您的代码的(简化)版本。 – 2012-02-26 21:04:06

+0

确切的错误信息是“重新定义对象” – jasonaburton 2012-02-26 21:05:00

+0

好的,你需要显示一些代码。首先查看http://sscce.org(这是关于将您的代码降低到Stack Overflow的最佳格式)。 – 2012-02-26 21:06:30

回答

4

如果你还没有到位得到它们了,你需要把include guards到你的头文件,以防止包括相同的文件多次(这将重新定义的类)。

4

你应该在你的头文件中加入保护。这可以防止标题被包含两次。例如,在Object.h头的顶部,你会说,

#ifndef _OBJECT_H 
#define _OBJECT_H 

,然后你结束与头部,

#endif 

如果头已被列入,文字在#ifndef#endif之间被丢弃。