2012-02-26 2 views
1

У меня есть базовый класс Object, и у меня есть несколько производных классов, называемых Item, Person и Location.Ошибка переопределения с несколькими производными классами в главном

Поскольку каждый из них является производным от Object, мне нужно включить Object.h в каждый из файлов заголовков, и я включаю все производные классы в свою основную.

Потому что я делаю это, я получаю ошибку переопределения.

Что я хочу знать, является правильным способом включить эти файлы, чтобы избежать этой ошибки?

Спасибо!

РЕДАКТИРОВАТЬ:

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

Что такое * точное сообщение об ошибке? И, пожалуйста, покажите (упрощенную) версию вашего кода. –

+0

Точное сообщение об ошибке «Переопределение объекта» – jasonaburton

+0

Хорошо, вам нужно будет показать код. Сначала проверьте http://sscce.org (речь идет о кипячении вашего кода до максимально возможного формата для переполнения стека). –

ответ

6

Странно, все я встретил, который поражает эту проблему не имеет ни малейшего представления, что происходит, и вы правильно проанализировали проблему.

Прочитайте это: http://en.wikipedia.org/wiki/Include_guard

+0

То, что мне нужно. Благодаря! – jasonaburton

4

Если вы не получили их на месте уже, вам нужно поместить в include guards вы заголовочные файлы, чтобы предотвратить в том числе и те же файлы несколько раз (что бы переопределить классы).

4

Вы должны добавить в свои заголовки охранники. Это предотвращает включение заголовков дважды. Например, в верхней части Object.h заголовка, вы бы поставил,

#ifndef _OBJECT_H 
#define _OBJECT_H 

, а затем вы заканчиваете заголовок с,

#endif 

Если заголовок уже включен, текст между #ifndef и #endif.