我正在尝试用 C++ 开发 BattleShip 游戏,我快完成了。为此,我需要我的 gameOver
函数工作。当所有的船都沉没时,我的游戏就结束了。因此,我试图计算我的字符串状态中有多少小写字符(来自 Ship)。当一半字符是小写时,“ship”被销毁,我准备使用我的 gameOver
函数。
但不知何故我的 count_if
不起作用,我不知道为什么。
干得好:
#include <algorithm>
bool Ship::isDestroyed() const{
//This counts those chars that satisfy islower:
int lowercase = count_if (status.begin(), status.end(), islower);
return ( lowercase <= (status.length/2) ) ? true : false;
}
bool Board::gameOver() {
bool is_the_game_over = true;
for(int i = 0 ; i < ships.size() ; i++){
if( ships[i].isDestroyed() == false ) {
//There is at least one ship that is not destroyed.
is_the_game_over = false ;
break;
}
}
return is_the_game_over;
}
我究竟做错了什么?
最佳答案
尝试通过以下方式更改算法调用
int lowercase = count_if (status.begin(), status.end(), ::islower);
^^^
允许编译器将标准 C 函数放在全局命名空间中。
否则使用 lambda 表达式,例如
int lowercase = count_if (status.begin(), status.end(),
[]( char c ) return islower( c ); } );
关于c++ - 'islower' 的无效重载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30353012/