我正在尝试用 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/

10-12 14:56