Объекты класса не объявлены в области видимости - PullRequest
0 голосов
/ 25 апреля 2018

В настоящее время я испытываю проблему, которую просто не могу понять, почему это происходит. В моей (Unsplit) программе я создал класс, который определяет объект-сущность и способен прекрасно обрабатывать его создание и переменные (как я проверял перед добавлением

std::string getName(Entity)const;
std::string getType(Entity)const;
int getDamage(Entity)const;
int getHealth(Entity)const;

Но когда я это сделаю ... Хотя они уже объявлены публично в классе, и я полностью могу вызвать Initialize (); Атака(); и PrintStats (); просто отлично, он не видит остальные четыре и поэтому не может быть вызван.

#include <iostream>
#include <string>
#include <math.h>
#include <stdlib.h>     /* srand, rand */
#include <time.h>       /* time */
using namespace std;

class Entity
{
public:
    Entity() { // default constructor

        name = "Human";
        type = "Normal";
        damage = 1;
        health = 100;

    }
    void printStats();
    void Initialize(string, string, int, int); //transformer or setting function
    void Attack(Entity&); //observer or getter function
    std::string getName(Entity)const;
    std::string getType(Entity)const;
    int getDamage(Entity)const;
    int getHealth(Entity)const;

private://data members and special function prototypes
    std::string name;
    std::string type;
    int damage;
    int health;

};

void summonEnemy(Entity&);

int main () {

    /* initialize random seed: */
    srand (time(NULL));

    Entity  Player;//declaring new class objects
    Entity  Enemy;//declaring new class objects
    Player.Initialize("Player", "Normal", 10, 90);
    summonEnemy(Enemy);

    return 0;

}

void summonEnemy(Entity &target) {

    target.Initialize("Enemy", "Normal", floor(rand() % 20 + 1), floor(rand() % 100));
   cout << "An " << getType(target) << " type " << getName(target) << " has appeared with " <<
        getHealth(target) << "HP and can do " << getDamage(target) << " damage.";

}

Сообщение об ошибке:

error:'getType' Was not defined in this scope.
error:'getName' Was not defined in this scope.
error:'getHealth' Was not defined in this scope.
error:'getDamage' Was not defined in this scope.

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

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Вы не правильно их называете. Они являются членами класса Entity, а не автономными функциями. Удалите из них параметры Entity, поскольку они уже имеют неявный параметр Entity *this, а затем вызовите их следующим образом:

class Entity
{
public:
    Entity(); // default constructor
    ...
    std::string getName() const;
    std::string getType() const;
    int getDamage() const;
    int getHealth() const;
    ...
};

Entity::Entity()
{
    Initialize("Human", "Normal", 1, 100);
}

std::string Entity::getName() const
{
    return name;
}

std::string Entity::getType() const
{
    return type;
}

int getDamage() const
{
    return damage;
}

int getHealth() const
{
    return health;    
}

void summonEnemy(Entity &target)
{
    target.Initialize("Enemy", "Normal", floor(rand() % 20 + 1), floor(rand() % 100));
    cout << "An " << target.getType() << " type " << target.getName() << " has appeared with " <<
        target.getHealth() << "HP and can do " << target.getDamage() << " damage.";
}
0 голосов
/ 25 апреля 2018

getType является функцией-членом Entity, поэтому необходимо вызвать ее для объекта Entity:

target.getType();

В классе вы можете реализовать его как:

class Entity {
    ...
    std::string getType() const { return type; }
    ...
};

То же самое верно и для остальных трех сеттеров.

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