排序错误:不允许输入类型名称

时间:2015-07-18 17:48:01

标签: c++ sorting struct

在编写此代码时,我遇到了几个编译器错误,以排序我的数组结构。任何人都可以告诉我,我的代码错误是什么?这些是编译器中显示的错误,所有错误都来自

std::sort(player.begin(), player.end(), &player);

1.error C2780:'void std :: sort(_RanIt,_RanIt,_Pr)':需要3个参数 - 提供1个

2.error C2780:'void std :: sort(_RanIt,_RanIt)':需要2个参数 - 提供1个

3.error C2228:'。begin'的左边必须有class / struct / union

4.error C2228:'。end'的左边必须有class / struct / union

5.error C2275:'player':非法使用此类型作为表达式

6.IntelliSense:不允许输入类型名称

我的代码如下。

struct player
{
  char name[31];
  int num_attempt;
  time_t time_elapsed;
  bool operator ()(const player & lhs, const player & rhs)
  {return lhs.num_attempt < rhs.num_attempt; 
   return lhs.time_elapsed <rhs.time_elapsed;}
}player_data[5]

std::sort(player.begin(), player.end(), &player);

1 个答案:

答案 0 :(得分:0)

std::sort期望它的前两个参数是开头的随机访问迭代器和要排序的序列。您似乎在类型名称上调用方法,这是语法错误。 (如果beginendplayer类型的静态方法,则正确的语法为player::begin())。您应该将player.begin()player.end()替换为将迭代器返回到序列中的内容;也许像std::begin(player_data)std::end(player_data)

此外,std::sort需要一个比较器对象,而不是指向某个东西的指针。取一个类型的地址,就像你的例子一样,显然不起作用,但由于你的每个对象都是比较器,你可以使用player_data[0]

因此,对std::sort的调用可能适用于您

std::sort(std::begin(player_data), std::end(player_data), player_data[0]);