2017-02-02 3 views
0

私はゲーム用の基本レイアウトを作成しています。メインファイルからクラスを分離し、2つの新しいファイルを作成する経験はほとんどありません(実装ファイル、.hファイル)。私はどういうわけか分裂のいくつかを混乱させ、正確にどこが間違っているのか分かりません。私はまた、私のメインでこれらの2つの新しいファイルからオブジェクトを作成する方法を考え出すのに問題があります。たとえば、ORIGINALクラスを表示し、次に.hを、次に.cppを表示します。私のヘッダーファイルとC++の実装ファイルに問題があります

******元のクラス******

class Character{ 

public: 
    string name; 
    int health; 

    Character(){ 
     setName("Unknown Caster"); 
     setHealth(20); 
    } 
    Character(string name, int health){ 
     setName(name); 
     setHealth(health); 
    } 
    void setName(string x){ 
     cout << "What is your name?" << endl; 
     cin >> x; 
     name = x; 
    } 
    int setHealth (int health){ 
     if(health < 0){ 
      health = 0; 
     } 
     this-> health = health; 
     return health; 
    } 
    string getName(){ 
     return name; 
    } 
}; 

***** ORIGINALクラスの最後*****

*****開始.hファイル*****

#ifndef Character_h 
#define Character_h 
using namespace std; 

class Character{ 

public: 
    string name; 
    int health; 

    Character();///default constructor 

    Character(string name, int health); 

    void setName(string x){ 
    } 

    int setHealth (int health){ 
    } 

    string getName(){ 
     return name; 
    } 
}; 

#endif 

***** .Hファイルの終わり*****

***** .cppファイルの始まり*****

.cppファイルの ​​

**** END *****

私のコードは、私は2つの異なるファイルに1つのクラスを分離する前に、比較的スムーズに実行していたので、私は、私はそれをやったことを信じるように傾斜しています間違って私の質問は次のとおりです。私は何を間違えたのですか?私のメインでこのクラスのオブジェクトを作る方法は?事前にお時間をいただきありがとうございます!あなたは、ヘッダーおよびCPPを分割

+3

ヘッダーファイルに 'using namespace std;'を入れないでください。 – PaulMcKenzie

+0

[The Definitive C++ Book Guide and List](http://stackoverflow.com/q/388242/1889329)をご覧ください。 – IInspectable

+3

ヘッダーファイルの空の関数本体について教えてください。関数の宣言は 'void setName(string x);' void setName(string x){} 'のようになります。 – NathanOliver

答えて

2

は、あなたがすべてを空にしたからといって、これらは

void setName(string x){ 
} 

int setHealth (int health){ 
} 

string getName(){ 
    return name; 
} 

void setName(string x); 
int setHealth (int health); 
string getName(); 

をする必要があります例えば、ヘッダ内の任意の定義を残していません{}の間のコードでは、これらの機能を本質的に機能しないように定義しています。次に、に、再度をcppファイルに再定義しようとしました。

+0

ありがとうございます!私は今、2つのエラーがあり、 "未定義のCharacter :: CharacterとCharacter :: getName()"という言い方をしています。 "Character"オブジェクトを作成しようとする私のメインでは、そこから "Character character"私の.cppファイルの中にあった機能は何も働いていません。これは、私がクラスファイルを分離していたという私の最後の質問に私をもたらし、それはメインの "Character"オブジェクトを宣言する方法です。 –

0

クラス内の関数を2回定義しています。この関数は、同じ名前、戻り値の型およびパラメーター(エラー)を持つ2つの定義済み関数としてカウントされます。

宣言:

type func_name(parameter_type , parameter_type); 

定義:

あなたが一度宣言し、プログラムごとに一度定義したい
type func_name(parameter_type name, parameter_type name2) { 
    //code 
} 

関連する問題