c++ - 使用未定义的 'Player' 和 'player' 使用未定义的 'Player' 错误

标签 c++ class

class Skeleton {
public:
    void attack(Player player) {
        if (canAttackSkeleton()) {
            player.setHealth(player.getHealth() - _attackDamage); //C2027 and C2228 for setHealth() and getHealth()
            return;
        }
    }
    void getAttacked(Player player) {
        _health -= player.getAttackDamage(); //C2027 and C2228 for getAttackDamage()
    }


private:
    float _attackDamage = 100.0f;
};

class Player{
public:
    void attack(Skeleton skeleton) {
        if (canAttackPlayer()) {
            skeleton.setHealth(skeleton.getHealth() - _attackDamage);
            return;
        }
    }
    void getAttacked(Skeleton skeleton) {
        _health -= skeleton.getAttackDamage();
    }


private:
    float _attackDamage = 100.0f;
};

这是我的代码加上主要功能

基本上我得到“use of undefined 'Player'”错误代码 C2027。此外,对于 .setHealth.getHealth.getAttackDamage,我收到错误消息“必须具有类/结构/union ”,错误代码为 C2228

我做错了什么?

最佳答案

Undefined表示编译器找不到Player的定义。如果您切换顺序,那么您将收到未定义骨架的错误。你应该考虑有一个字符类。

#include<iostream>
class Character {
public:
    Character() : health(100), attackDamage(10) {}
    virtual void attack(Character& other) {
        other.getAttacked(*this);
    }
    virtual void getAttacked(Character& other) {
        this->health -= other.getAttackDamage();
    }
    virtual int getHealth() const { return health; }
    virtual void setHealth(int Health) { health = Health; }
    virtual int getAttackDamage() const { return attackDamage; }
    virtual void setAttackDamage(int AttackDamage) { attackDamage = AttackDamage; }

protected:
    int health;
    int attackDamage;
};

class Player : public Character {

};

class Skeleton : public Character {

};

int main(int argc, char* argv[]) {

    Player player;
    Skeleton skeleton;
    std::cout << "Before attack...\n\nPlayer Health: " << player.getHealth() << std::endl << "Skeleton Health: " << skeleton.getHealth() << std::endl;

    player.attack(skeleton);
    std::cout << "After attack...\n\nPlayer Health: " << player.getHealth() << std::endl << "Skeleton Health: " << skeleton.getHealth() << std::endl;

    player.setAttackDamage(50);
    std::cout << "Updated player attack to 50" << std::endl;
    player.attack(skeleton);

    std::cout << "After second attack with 50 attack damage...\n\nPlayer Health: " << player.getHealth() << std::endl << "Skeleton Health: " << skeleton.getHealth() << std::endl;

    return 0;
}

关于c++ - 使用未定义的 'Player' 和 'player' 使用未定义的 'Player' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41403698/

相关文章:

C++ 11 标准线程总和与原子非常慢

c++ - 链接/运行时不同 GCC 版本的风险?

c# - 具有多个嵌套类的 Propertygrid

class - 如何覆盖类中字段的默认值?

c++ - 试图从另一个类访问 MainWindow 的小部件

c++ - 禁用对异常的支持是否也会禁用对 `std::move_if_noexcept` 的支持?

c++ - 在 Visual Studio 中使用命令行参数进行调试

c++ - 实现上下文切换 - 第二个功能不再运行

json - perl6 类到 json 排除属性

c++ - 重新审视 switch 内部的对象实例化 (c++)