从班级到.cpp

时间:2012-02-12 21:51:13

标签: class object

我试图用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;
}

3 个答案:

答案 0 :(得分:3)

变量charmanderbulbausarsquirtle正在构造函数中声明。把它们放在你的主要部分,它应该工作。

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)

charmanderpokemon类的构造函数中声明,这意味着它是唯一可见的位置。您可能希望将这些声明和使用它们的代码移动到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; }

很可能会奏效。