主要中具有多个派生类的重新定义错误

时间:2012-02-26 21:03:15

标签: c++ header-files redefinition

我有一个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;
}

3 个答案:

答案 0 :(得分:6)

奇怪的是,遇到这个问题的每个人都遇到了这个问题并没有丝毫知道发生了什么,你已经正确分析了这个问题。

阅读本文: http://en.wikipedia.org/wiki/Include_guard

答案 1 :(得分:5)

您应该在标题中添加包含警示。这可以防止标题被包含两次。例如,在Object.h标题的顶部,您将放置

#ifndef _OBJECT_H
#define _OBJECT_H

然后用#,

结束标题
#endif

如果已包含标头,则会删除#ifndef#endif之间的文字。

答案 2 :(得分:4)

如果您尚未安装它们,则需要将include guards放入头文件中以防止多次包含相同的文件(这将重新定义类)。