5

我有一个 Object 基类,还有几个派生类,分别称为 Item、Person 和 Location。

因为它们中的每一个都是从 Object 派生的,所以我需要在它们的每个头文件中包含 Object.h,并且我在我的 main 中包含所有派生类。

因为我正在这样做,所以我收到了重新定义错误。

我想知道的是包含这些文件以避免此错误的正确方法是什么?

谢谢!

编辑:

对象.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();
};

项目.h

using namespace std;

#include "object.h"

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

};

语言环境.h

using namespace std;

#include "object.h"

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

主文件

#include <iostream>
#include <string>

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


using namespace std;

int main(){
    return 0;
}
4

3 回答 3

7

奇怪,我遇到的每个遇到这个问题的人都不知道发生了什么,而且你已经正确地分析了这个问题。

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

于 2012-02-26T21:06:01.230 回答
7

您应该在标题中添加包含防护。这可以防止标题被包含两次。例如,在 Object.h 标头的顶部,您可以输入,

#ifndef _OBJECT_H
#define _OBJECT_H

然后你结束标题,

#endif

如果已经包含了标题,则删除#ifndef和之间的文本。#endif

于 2012-02-26T21:08:39.250 回答
4

如果您还没有将它们放在适当的位置,则需要将包含保护放入头文件中,以防止多次包含相同的文件(这将重新定义类)。

于 2012-02-26T21:07:41.860 回答