2012-02-26 55 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之間被丟棄。