私は、2人の戦闘員の戦いで勝者の名前を返さなければならないという問題があります。 次のように戦闘機のためのクラスがある:これはSigillシグナルが途中で存在するのはなぜですか?
class Fighter
{
private:
std::string name;
int health;
int damagePerAttack;
public:
Fighter(std::string name, int health, int damagePerAttack)
{
this->name = name;
this->health = health;
this->damagePerAttack = damagePerAttack;
}
~Fighter() { };
std::string getName()
{
return name;
}
int getHealth()
{
return health;
}
int getDamagePerAttack()
{
return damagePerAttack;
}
void setHealth(int value)
{
health = value;
}
};
が、私は勝者の名前を返すべき関数を書きました。
std::string declareWinner(Fighter* fighter1, Fighter* fighter2,
std::string firstAttacker)
{
// Your code goes here. Have fun!
if(firstAttacker==fighter1->getName())
{
while(fighter1->getHealth()!=0&&fighter2->getHealth()!=0)
{
fighter2->setHealth(fighter2->getHealth()-fighter1->getDamagePerAttack());
if(fighter2->getHealth()<=0)
{
return fighter1->getName();
}
fighter1->setHealth(fighter1->getHealth()-fighter2->getDamagePerAttack());
if(fighter1->getHealth()<=0)
{
return fighter2->getName();
}
}
}
else if(firstAttacker==fighter2->getName())
{
while(fighter1->getHealth()!=0&&fighter2->getHealth()!=0)
{
fighter1->setHealth(fighter1->getHealth()-fighter2->getDamagePerAttack());
if(fighter1->getHealth()<=0)
{
return fighter2->getName();
}
fighter2->setHealth(fighter2->getHealth()-fighter1->getDamagePerAttack());
if(fighter2->getHealth()<=0)
{
return fighter1->getName();
}
}
}
}
これは、すべての私のニーズを満たし、それがSIGILL信号をスローし、私は私が間違っていたかわかりません。私はそれをどのように扱うべきですか?
はどのようにあなたはそれがdeclareWinnerでクラッシュしていないどこか別の場所を知っていますか? – mnistic
NULL-Pointerの戦闘機を調べる以外に、declareWinner()を呼び出すすべてのケースで文字列を返すようにしてください。 – Gerriet
@mnisticどこがクラッシュするのか分かりませんが、私はそれがsigillシグナルをスローすることを知っています。私はcodewarsでこの問題を解決しようとしているので、それは私にその信号を示しています。私はそれをコードブロックに入れて実行しようとしましたが、いくつかの簡単な例ではうまくいきます。 –