コードダンプの謝罪:
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つだけです。
実際には、関数を実装するためだけにクラスをもう一度定義する必要はありません。次のような関数を実装します。
#include "gameObject.h"
gameObject::gameObject(int inx, int iny)
{
x = inx;
y = iny;
}
int gameObject::add()
{
return x+y;
}
等
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 {}定義ブロック内にない
同じクラスを2回定義しているのはそのためです。
CPPファイルにメソッドを実装することが目的の場合は、次のようにします。
gameObject::gameObject()
{
x = 0;
y = 0;
}
gameObject::~gameObject()
{
//
}
int gameObject::add()
{
return x+y;
}
ヘッダーファイルを追加する
#pragma once
テンプレートに問題がある場合、または別の.cppファイルからクラスを呼び出している場合
ヘッダーファイルで「#pragma once」を使用してみてください。
.h
ファイルは次のようにラップする必要があります。
#ifndef Included_NameModel_H
#define Included_NameModel_H
// Existing code goes here
#endif
問題を解決するために、いくつかの#ifndef name #define name #endifプリプロセッサを含めます。問題は、すべてのプリプロセッサ(#include)でクラスを複数回再定義しているため、ヘッダーから関数に戻ってからヘッダーに戻ることです。
class gameObject
ファイルと.cpp
ファイルの両方で.h
を定義します。
それは再定義エラーを作成しています。
クラスを定義する必要があります、[〜#〜] once [〜#〜]、[〜#〜 ] one [〜#〜]場所。 (慣習では、定義は.h
にあり、すべての実装は.cpp
にあります)
エラーメッセージのどの部分で問題が発生しましたか。
エラーの最初の部分は、クラスがgameObject.cpp
で再定義されたことを示しています
エラーの2番目の部分は、前の定義がgameObject.h
にあることを示しています。
メッセージはどれほど明確になりますか?