首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误消息:不允许抽象类类型为"X“的对象:纯虚拟"Y”没有覆盖器

错误消息:不允许抽象类类型为"X“的对象:纯虚拟"Y”没有覆盖器
EN

Stack Overflow用户
提问于 2018-04-27 00:23:10
回答 1查看 4.5K关注 0票数 1

Enemy.h

代码语言:javascript
复制
class Enemy
{
    int hp;
public:
    Enemy(int);
    void setHP(int);
    int getHP();
    virtual int attack() = 0;
};

Enemy.cpp

代码语言:javascript
复制
Enemy::Enemy(int playerXP)
{
    if (playerXP == 0) {
        hp = rand() % 5 + 1;
    }
    else if (playerXP > 0) {
        hp = rand() % (playerXP * 5) + 1;
    }
}

void Enemy::setHP(int currentHP)
{
    hp = currentHP;
}

int Enemy::getHP()
{
    return hp;
}

Reaper.h

代码语言:javascript
复制
#pragma once
#include "Enemy.h"

class Reaper : public Enemy
{
public:
    Reaper(int playerXP) : Enemy(playerXP)
    {   
    }

    int attack(int, int);
};

Reaper.cpp

代码语言:javascript
复制
int Reaper::attack(int pa, int php)
{
    int eatk = 0;
    if (pa == 0) {
        eatk = php * .5;
    }
    else {
        eatk = rand() % php * .25;
    }
    return eatk;
}

错误:

抽象类类型的对象“收割机”是不允许的:纯虚拟函数“敌人:攻击”没有漫游者。

我的问题是。我为什么要犯这个错误?我试图理解为什么我要得到这个,以及任何可能的答案来解决它。

EN

回答 1

Stack Overflow用户

发布于 2018-04-27 00:31:50

编译器没有意识到您想要覆盖基类中的攻击函数。它将int attack()int attack(int, int)看作是两个不同的函数,因为它们具有不同的类型签名。结果是您的Reaper类有两个函数,其中一个是纯虚拟函数。使用override关键字可以帮助避免这些错误,尽管它只在C++11和更新版本中可用。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50053589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档