在编写此代码时,我遇到了几个编译器错误,以排序我的数组结构。任何人都可以告诉我,我的代码错误是什么?这些是编译器中显示的错误,所有错误都来自
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);
答案 0 :(得分:0)
std::sort
期望它的前两个参数是开头的随机访问迭代器和要排序的序列。您似乎在类型名称上调用方法,这是语法错误。 (如果begin
和end
是player
类型的静态方法,则正确的语法为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]);