【问题标题】:sorting error: type name is not allowed排序错误:不允许类型名称
【发布时间】:2015-10-08 05:43:53
【问题描述】:

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

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' 的左边必须有类/结构/联合

4.error C2228: '.end' 的左边必须有类/结构/联合

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);

【问题讨论】:

  • player.begin(), player.end(), &amp;player 没有任何意义,player 是一个类型,而不是一个对象。请提供MCVE
  • 两个问题: player 是数组类型的名称,而不是数组。您可能打算使用 player_data,但要使其发挥作用,请看这里:stackoverflow.com/questions/14595285/…

标签: c++ sorting struct


【解决方案1】:

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]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多