나는 두명의 전투기 사이의 싸움에서 승자의 이름을 돌려줘야하는 문제가있다. 다음과 같이 전투기의 클래스는 다음과 같습니다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();
}
}
}
}
이것은 내 모든 필요를 충족 시키지만, 신호가 울리고, 내가 뭘 잘못했는지 모른다. 어떻게 처리해야합니까?
어떻게 당신은 declareWinner에 충돌이 아닌 다른 곳에서 알 수 있습니까? – mnistic
NULL- 포인터에 대한 전투기를 검사하는 것 외에도 declareWinner()를 호출 할 때마다 문자열을 반환해야합니다. – Gerriet
@mnistic 어디에서 충돌이 발생하는지 모르겠다. 나는 그것이 그 신호를 던지는 것을 안다. 코드 워어에서이 문제를 해결하기 위해 노력하고 있습니다. 그래서 그 신호를 보여줍니다. I.ve는 그것을 실행하기 위해 코드 블록에 넣으려고했는데, 몇 가지 간단한 예제의 경우 잘 작동합니다. –