我不能做一个简单的仿函数来比较字符串

时间:2014-11-06 21:45:58

标签: c++ std functor

我有这个仿函数类:

#include <string>

using namespace std;

class IsPlayerOfType
{
    public:
        IsPlayerOfType(const string& type) : type_(type) {}

        bool operator()(const Player* player) const
        {
            return (player->getType() == type_);
        }
    private:
        string type_;
};

“玩家”类代表具有多种方法和属性的玩家。其中,有getType()方法,它返回一个字符串。

在我的程序的某个时刻,我有一个名为players_的变量vector<Player*>

最后,我有以下代码来计算我的向量中某种类型的玩家数量:

int number = count_if(players_.begin(), players_.end(), IsPlayerOfType("Defensive"));

编译时我遇到很多错误,例如:

  • 错误C2011:'IsPlayerOfType':'class'type redefinition
  • 错误C2440:'':无法从'const char [10]'转换为'IsPlayerOfType'
  • 错误C2780:'iterator_traits&lt; _Iter&gt; :: difference_type std :: count_if(_InIt,_InIt,_Pr)':需要3个参数 - 提供2个

    我不太清楚count_if是如何工作的,我试着用这个答案来编写这段代码:https://stackoverflow.com/a/13525420

    我没有看到我错在哪里,编译器错误让我感到困惑。

1 个答案:

答案 0 :(得分:5)

我的通灵调试技巧告诉我,您忘记了#define包含定义IsPlayerOfType标题中的警卫,导致标题被多次包含在某些源文件中。请记住,#include由预处理器进行文本替换,这意味着预处理器需要额外的逻辑来尝试防止多次包含。

另请注意,标头中文件范围的using非常危险,应该避免使用。