【问题标题】:C++ invalid operator< when using sortingC ++无效运算符<使用排序时
【发布时间】:2015-02-11 01:28:03
【问题描述】:
bool sortingGame(Player Player1, Player Player2)
{
    if (Player1.gamePercent() > Player2.gamePercent())// first compare precetage (float)
    {
        return true;
    }
    else if (Player2.gamePercent() > Player1.gamePercent())
    {
        return false;
    }
    else if (Player1.getLastName() > Player2.getLastName())//then names (std::string)
    {
        return true;
    }
    else if (Player2.getLastName() > Player1.getLastName())
    {
        return false;
    }
    else if (Player1.getFirstName() > Player2.getFirstName())
    {
        return true;
    }
    else
    {
        return false;
    }
}

在 main() 中:

sort(Players.begin(), Players.end(), sortGame);

这是在 Visual Studio 中调试时显示的错误。

Program:C:\.....\include\algorithm
Line:3014
Expression: invalid operator<

【问题讨论】:

  • 3014 到底是哪一行?
  • 不确定...在#include
  • @pinesfrst Visual Studio 错误可能是由于您的operator &lt; 不一致而出现的,即a &lt; b 但同时b &lt; a。当然这是一种荒谬的情况,但是 Visual Studio 的调试运行时会针对这种错误情况进行测试,可能您的代码没有通过测试。
  • 此外,您应该通过const reference 将对象传递给函数,而不是通过值。
  • 要获得明确的答案,请发帖MCVE

标签: c++ string sorting operator-keyword


【解决方案1】:

当我模拟一个玩家类并运行您的代码时,它运行良好。错误必须属于其他地方。

但是,通过检查相等性并返回比较结果,您的代码可以大大收紧:

bool sortingGame(Player Player1, Player Player2)
{
    if (Player1.gamePercent() != Player2.gamePercent())// first compare precetage (float)
    {
        return Player1.gamePercent() > Player2.gamePercent();
    }
    else if (Player1.getLastName() != Player2.getLastName())
    {
        return Player1.getLastName() > Player2.getLastName();
    }
    else
    {
        return Player1.getFirstName() > Player2.getFirstName();
    }

}

还要考虑字符串通常以反向排序顺序(字母顺序)列出。因此小于运算符(

bool sortingGame(Player Player1, Player Player2)
{
    if (Player1.gamePercent() != Player2.gamePercent())// first compare precetage (float)
    {
        return Player1.gamePercent() > Player2.gamePercent();
    }
    else if (Player1.getLastName() != Player2.getLastName())
    {
        return Player1.getLastName() < Player2.getLastName();
    }
    else
    {
        return Player1.getFirstName() < Player2.getFirstName();
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 2021-05-17
    • 2011-07-27
    • 1970-01-01
    相关资源
    最近更新 更多