5

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;
}
4

3 に答える 3

7

奇妙なことに、この問題にぶつかった私が会った人は皆、何が起こっているのかまったく理解していないのに、あなたは問題を適切に分析しているのです。

これを読んでください: http://en.wikipedia.org/wiki/Include_guard

于 2012-02-26T21:06:01.230 に答える
7

インクルード ガードをヘッダーに追加する必要があります。これにより、ヘッダーが 2 回含まれることがなくなります。たとえば、Object.h ヘッダーの先頭に、次のように記述します。

#ifndef _OBJECT_H
#define _OBJECT_H

そして、ヘッダーを次のように終了します。

#endif

ヘッダーが既に含まれている場合、 と の間のテキスト#ifndef#endif削除されます。

于 2012-02-26T21:08:39.250 に答える
4

それらをまだ配置していない場合は、ヘッダー ファイルにインクルード ガードを配置して、同じファイルが複数回インクルードされないようにする必要があります (クラスが再定義されます)。

于 2012-02-26T21:07:41.860 に答える