Из класса в .cpp - PullRequest
       1

Из класса в .cpp

1 голос
/ 13 февраля 2012

Я пытался сделать простую текстовую игру про покемонов на с ++.Я создал класс для pokemon, а затем в моем pokemain.cpp попытался вывести hp из charmander.Когда я пытаюсь запустить свой 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 ]

3 голосов
/ 13 февраля 2012

Переменные 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 голос
/ 13 февраля 2012

charmander объявлен в конструкторе для класса pokemon, что означает, что это единственное место, где он виден.Возможно, вы захотите переместить эти объявления и код, который их использует, в main.

Объявление экземпляра класса в конструкторе для этого же класса вызовет бесконечный цикл, в любом случае - подумайте об этом.

0 голосов
/ 13 февраля 2012

Вы никогда не создавали экземпляр самого класса. При создании класса очень возможно иметь экземпляры этого же класса в качестве рекурсивного экземпляра. При этом программа не знает, откуда вы пришли, в вашей декларации. Для того, чтобы исправить вашу ошибку, удалите объявление покемона в основной части программы.

</p> <pre><code>int main() { pokemon c; cout << "C has " << c.hp() << endl; return 0; }

Скорее всего, будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...