1. ホーム
  2. スクリプト・コラム
  3. その他

[解決済み】なぜクラスの再定義エラーが発生するのでしょうか?

2022-01-02 08:54:34

質問

コードは次のとおりです。

gameObject.cpp。

#include "gameObject.h"
class gameObject
{
    private:
    int x;
    int y;
    public:
    gameObject()
    {
    x = 0;
    y = 0;
    }

    gameObject(int inx, int iny)
    {
        x = inx;
        y = iny;
    }

    ~gameObject()
    {
    //
    }
    int add()
    {
        return x+y;
    }
};

gameObject.h。

class gameObject
{
    private:
    int x;
    int y;
    public:
    gameObject();

    gameObject(int inx, int iny);
    ~gameObject();
    int add();
};

実行すると、エラーが発生します。

||=== terrac, Debug ===|
C:\terrac\gameObject.cpp|4|error: redefinition of `class gameObject'|
C:\terrac\gameObject.h|3|error: previous definition of `class gameObject'|
||=== Build finished: 2 errors, 0 warnings ===|

解決方法は?

ヘッダーファイルでクラスを定義し、そのヘッダーファイルを *.cpp ファイルにインクルードして、2回目のクラス定義を行う場合。しかし、gameObjectクラスの定義は、1つの翻訳ユニットに対して1つしか許可されません。

実は、関数を実装するためだけに、もう一度クラスを定義する必要はないのです。このように関数を実装します。

#include "gameObject.h"

gameObject::gameObject(int inx, int iny)
{
    x = inx;
    y = iny;
}

int gameObject::add()
{
    return x+y;
}

その他