error: passing 'const Player' as 'this' argument discards qualifiers [-fpermissive]|

error: passing 'const Player' as 'this' argument discards qualifiers [-fpermissive]|

我正在用 C++ 做一个学校项目,我定义了一个接口,所以我不能更改函数的参数和类型。我遇到此错误的问题:error: passing 'const Player' as 'this' argument discards qualifiers [-fpermissive]。我在 Whosebug 上阅读了关于此的其他问题,但它们似乎没有用。 这个问题有2个classes。 Player 扩展 Character 并拥有 abilities。应该有一个给向量数组增加能力的函数:

Player& addAbility(const Ability& ability){
    abilities.push_back(ability);

    return *this;
}

函数类型和参数无法更改。

之后应该有一个获取所有能力的函数:

const vector<Ability>& getAbilities(){
    return abilities;
}

Ability class 看起来像这样:

class Ability{
public:
    Ability(const string& _name, const float _damage){
        name = _name;
        damage = _damage;
    }
    float getDamage(){
        return damage;
    }

    void setDamage(const float _damage){
        damage = _damage;
    }

    const string& getName(){
        return name;
    }

    void setName(const string& _name){
        name = _name;
    }

private:
    string name;
    float damage;

};

函数类型和参数无法更改。

在classPlayerHelper里面应该有一个函数来总结所有技能的伤害:

static float getTotalPlayerDamage(const Player& player){
    float sum = 0;
    const vector<Ability>& abilities = player.getAbilities();
    
    for(int i=0;i<abilities.size();i++){
        sum += abilities[i].getDamage();
    }

    return sum;
}

错误在这一行:

const vector<Ability>& abilities = player.getAbilities();

我尝试了 const_cast 但它似乎也没有用。 任何帮助将不胜感激!

问题player是一个const Player&但是getAbilities是一个non-const成员函数因此不能拜访了 const Player.

解决这个问题,你可以使getAbilities成为一个const成员函数,如下所示:

//------------------------------------vvvvv---->const added here
const vector<Ability>& getAbilities() const{
    return abilities;
}