我有这个仿函数类:
#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"));
编译时我遇到很多错误,例如:
错误C2780:'iterator_traits&lt; _Iter&gt; :: difference_type std :: count_if(_InIt,_InIt,_Pr)':需要3个参数 - 提供2个
我不太清楚count_if是如何工作的,我试着用这个答案来编写这段代码:https://stackoverflow.com/a/13525420
我没有看到我错在哪里,编译器错误让我感到困惑。
答案 0 :(得分:5)
我的通灵调试技巧告诉我,您忘记了#define
包含定义IsPlayerOfType
标题中的警卫,导致标题被多次包含在某些源文件中。请记住,#include
由预处理器进行文本替换,这意味着预处理器需要额外的逻辑来尝试防止多次包含。
另请注意,标头中文件范围的using
非常危险,应该避免使用。