我试图用c ++制作一个简单的口袋妖怪文本游戏。 我为口袋妖怪创建了一个类,然后在我的pokemain.cpp中尝试从charmander输出hp。 当我尝试运行我的pokemonmain.cpp时,它说没有声明charmander。我确定这是一个愚蠢的问题,但我找不到答案。
这是我的代码。
//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;
}
答案 0 :(得分:3)
变量charmander
,bulbausar
和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;
}
答案 1 :(得分:1)
charmander
在pokemon
类的构造函数中声明,这意味着它是唯一可见的位置。您可能希望将这些声明和使用它们的代码移动到main
。
在同一个类的构造函数中声明一个类的实例将导致无限循环 - 无论如何 - 考虑一下。
答案 2 :(得分:0)
你从未实例化过这个类。创建类时,很可能将同一个类的实例作为递归实例。据说该计划不知道你在宣言中的来源。为了解决你的错误,删除口袋妖怪的声明到程序的主要部分。
int main()
{
pokemon c;
cout << "C has " << c.hp() << endl;
return 0;
}
int main()
{
pokemon c;
cout << "C has " << c.hp() << endl;
return 0;
}
很可能会奏效。