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

jas*_*ton 3 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();
};
Run Code Online (Sandbox Code Playgroud)

item.h

using namespace std;

#include "object.h"

class Item : public Object{
    public:
        Item();
        Item(string name, string description);

};
Run Code Online (Sandbox Code Playgroud)

locale.h文件

using namespace std;

#include "object.h"

class Locale : public Object{
    public:
        Locale();
        Locale(string name, string description);
};
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include <iostream>
#include <string>

#include "locale.h"
#include "item.h"


using namespace std;

int main(){
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Woj*_*cha 7

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

请阅读:http: //en.wikipedia.org/wiki/Include_guard


小智 6

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

#ifndef _OBJECT_H
#define _OBJECT_H
Run Code Online (Sandbox Code Playgroud)

然后你结束标题,

#endif
Run Code Online (Sandbox Code Playgroud)

如果已包含标题#ifndef,#endif则删除之间的文本.