28

コードダンプについてお詫びします。

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 ===|

何が悪いのかわかりません。ヘルプ?

4

8 に答える 8

56

ヘッダーファイルでクラスを定義し、ヘッダーファイルを* .cppファイルにインクルードし、クラスを2回定義します。これは、最初の定義がヘッダーファイルによって変換単位にドラッグされるためです。ただし、翻訳単位ごとに許可されるgameObjectクラス定義は1つだけです。

実際には、関数を実装するためだけにクラスをもう一度定義する必要はありません。次のような関数を実装します。

#include "gameObject.h"

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

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

于 2010-09-19T16:29:50.687 に答える
10

cppファイルの実装は次の形式である必要があります

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

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

クラスgameObject{}定義ブロック内にありません

于 2010-09-19T16:30:31.427 に答える
10

ヘッダーファイルを追加する

#pragma once
于 2016-01-19T09:34:48.863 に答える
6

.h次のようにファイルをラップする必要があります。

#ifndef Included_NameModel_H

#define Included_NameModel_H

// Existing code goes here

#endif
于 2016-05-10T17:47:42.213 に答える
5

同じクラスを2回定義しているのはそのためです。

CPPファイルにメソッドを実装することが目的の場合は、次のようにします。

gameObject::gameObject()
{
    x = 0;
    y = 0;
}
gameObject::~gameObject()
{
    //
}
int gameObject::add()
{
        return x+y;
}
于 2010-09-19T16:31:52.000 に答える
3

テンプレートに問題がある場合、または別の.cppファイルからクラスを呼び出している場合

ヘッダーファイルで「#pragmaonce」を使用してみてください。

于 2019-03-15T03:39:14.970 に答える
0

問題を解決するための#ifndef名#define名#endifプリプロセッサをいくつか含めます。問題は、ヘッダーから関数に移動してからヘッダーに戻るため、すべてのプリプロセッサー(#include)を使用してクラスを複数回再定義することです。

于 2013-07-13T01:32:37.117 に答える
-1

ファイルとファイルclass gameObjectの両方でを定義します。 これにより、再定義エラーが発生します。.cpp.h

クラス、ONCE1か所で定義する必要があります。(慣例では、定義はにあり.h、すべての実装はにあります.cpp

エラーメッセージのどの部分で問題が発生しましたか?

エラーの最初の部分は、クラスがで再定義されたことを示しています。gameObject.cpp
エラーの2番目の部分は、前の定義がにあることを示していgameObject.hます。

メッセージはどれほど明確になりますか?

于 2010-09-19T16:30:47.040 に答える