2

ヘッダー内でクラスオブジェクトを宣言しようとしていますが、機能させることができません。現在、各関数の機能を定義する2つのヘッダーファイルと2つのcppファイルがあります。クラスはHeltalおよびArrayと呼ばれ、両方とも独自のヘッダーファイル(heltal.hおよびarray.h)にあります。

Arrayクラスのプライベート部分内でHeltalクラスオブジェクトを宣言しようとしていますが、何をしても宣言する方法が見つかりません。heltal.hヘッダーをarray.hヘッダーに含めようとしましたが、再定義について文句を言い始めます。

array.cppで宣言することは問題なく機能しますが、代わりにヘッダーで定義してもらいたいと思います。

現在のファイルは次のようになります。

heltal.h

class Heltal {
    public:
        Heltal();
        Heltal(int tal);
        ~Heltal();

        void set(int tal);
        bool operator < (const Heltal &heltal) const
        {
            return (heltal < heltal.heltal);
        }
        bool operator > (const Heltal &heltal) const
        {
            return (heltal > heltal.heltal);
        }
    private:
        int heltal;
};

array.h

#include <vector>
class Array {
public:
    Array();
    Array(int in);
    ~Array();
    int Random(int min, int max);
private:
    Heltal h;
    int size;
};

両方のヘッダーがmain.cppに含まれています

4

3 に答える 3

3

に含めたとき、あなたは正しい道に沿って始めましHeltal.hArray.h

ヘッダーにインクルードガードを追加します。これにより、インクルードの重複を防ぐことができます。

#ifndef HELTAL_H
#define HELTAL_H

class Heltal {
    ...
};

#endif

Heltal.hこれで、の上部に安全に含めることができArray.h、問題は解決されます。

于 2012-11-30T14:42:12.957 に答える
1

ac / cppファイルをコンパイルする場合、インクルードされたファイルは最初にc/cppファイルで展開されます。一部のクラスは正しい順序である必要があります。たとえば、配列の前にHeltalが必要なので、インクルード順序でこれを確認する必要があります。

于 2012-11-30T14:44:45.860 に答える
0

array.h内にheltal.hを含める必要がありますが、両方のファイルにガードを含める必要があります。

#ifndef array_h_guard
#define array_h_guard

// contents of array.h go here

#endif // array_h_guard

heltal.hについても同様です。これにより、複数の包含が防止されます。

array.hからheltal.hのみをインクルードできることに注意してください。これにより、当面の問題も修正されますが、インクルードガードの方が安全です。

于 2012-11-30T14:42:23.830 に答える