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;
}
我正在用 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;
}