2012-02-12 8 views
1

私は単純なポケモンのテキストゲームをC++で作ろうとしていました。 私はpokemonのためのクラスを作成し、次に私のpokemain.cppに、charmanderからhpを出力しようとしました。 pokemonmain.cppを実行しようとすると、charmanderが宣言されていないと表示されます。これは間違った質問だと確信していますが、私はそれに答えを見つけることはできません。クラスから.cppへ

ここに私のコードです。

//class named stats 
#include <iostream> 
using namespace std; 

class pokemon 
{ 
    int health, damage; 

    public: 

    pokemon (int,int); 
    int hp() 
    { 
     return (health); 
    } 

    int dmg() 
    { 
     return (damage); 
    } 

}; 

pokemon::pokemon (int hp, int dmg) 
{ 
    health = hp; 
    damage = dmg; 


    pokemon charmander (25,3); 
    pokemon bulbasaur (20,4); 
    pokemon squirtle (30,2); 
    cout<<" Charmander has "<<charmander.hp()<<" hp and "<<charmander.dmg()<<" damage.\n"; 
    cout<<" Bulbasaur has "<<bulbasaur.hp()<<" hp and "<<bulbasaur.dmg()<<" damage.\n"; 
    cout<<" Squirtle has "<<squirtle.hp()<<" hp and "<<squirtle.dmg()<<" damage.\n"; 

} 

//pokemain.cpp 
#include <iostream> 
#include "stats.h" 
using namespace std; 


int main() 
{ 
    cout<<charmander.hp(); 
    return 0; 
} 

答えて

3

変数charmander,およびsquirtleがコンストラクタ内で宣言されています。あなたのメインに入れて、それは動作するはずです。

int main(void) { 
    pokemon charmander(25,3); 
    pokemon bulbausar(25,3); 
    pokemon squirtle(25,3); 

    cout<<" Charmander has "<<charmander.hp()<<" hp and "<<charmander.dmg()<<" damage.\n"; 
    cout<<" Bulbasaur has "<<bulbasaur.hp()<<" hp and "<<bulbasaur.dmg()<<" damage.\n"; 
    cout<<" Squirtle has "<<squirtle.hp()<<" hp and "<<squirtle.dmg()<<" damage.\n"; 

    return 0; 
} 
+0

あなたの返事にも感謝します。あなたはどちらも私に多くの研究を救いました – Chuy

+0

問題ありません。どのコンストラクタが何であるかを調べることをお勧めします。私はあなたが概念を完全に把握していないと言うことができます。あなたはここから始めることができます:http://www.fredosaurus.com/notes-cpp/oop-condestructors/constructors.html – Tiago

+0

そのリンクのおかげで、私は現在、大学でC++になりました。彼女のアクセント。 – Chuy

1

charmanderそれはそれは目に見える唯一の場所だ意味pokemonクラスのコンストラクタで宣言されています。これらの宣言とそれを使用するコードをmainに移動したいと思うかもしれません。

同じクラスのコンストラクタでクラスのインスタンスを宣言すると、とにかく無限ループが発生します。

+0

返信と回答ありがとう!出来た。 – Chuy

0

クラスそのものをインスタンス化したことはありません。クラスを作成するとき、同じクラスのインスタンスを再帰的インスタンスとして持つことは非常に可能です。それは、あなたの宣言でどこから来ているのか分からないと言われています。あなたの誤りを解決するために、ポケモンの宣言をプログラムの主要部分に移してください。

int main() 
{ 
    pokemon c; 

    cout << "C has " << c.hp() << endl; 
    return 0; 
} 

ウィル最も可能性の高い作品。

+0

例のおかげで! – Chuy

関連する問題