使用重载运算符的二进制表达式的无效操作数

Invalid Operands to Binary Expression using Overloaded Operators

编辑:我已经通读了 What are the basic rules and idioms for operator overloading? 上的指南,但我无法弄清楚是什么引发了错误。我不会因为反对票而受到伤害,但如果你能解释是什么导致你反对票,我将非常感激。我是这个社区的新手,不想问错问题或惹恼别人,但我确实需要帮助。没有人能弄清楚为什么它不起作用。

我收到一个错误:二进制表达式的操作数无效。我正在使用下面的 bubbleSort 方法对对象的链接列表进行排序。它在“*it1 > *it2 处抛出错误。取消引用 returns 存储在链表中的信息。

在这种情况下,它是2个对象,我的。我将在下面粘贴带有重载比较运算符的 class 定义。感谢任何帮助,我真的不知道出了什么问题。我已经成功地让比较运算符在排序函数之外工作。

如果需要更多信息,请告诉我。完全披露,这是一个 class 项目。我不是要代码,只是要解决这个错误,我的教授甚至被这个错误难住了。

template<typename T>
void LL<T>::bubbleSortI()
{
bool hasChanged = true;
int swapcount = 0;

while (hasChanged)
{
    int changecount = 0;
    LL_iterator<T> it1 = begin();
    LL_iterator<T> it2 = begin();
    ++it2;

    while(it2!=trailer)
    {
        if (*it1 > *it2)
        {
            it1.swap(it2);
            swapcount++;
            changecount++;
        }
        ++it1;
        ++it2;
    }
    if(changecount==0)
    {
        hasChanged = false;
    }
}
cout << swapcount << " swaps performed on the list. The list is now ordered." << "\n";
}

以及我的 Class 声明

class Mine
{
    friend std::ostream& operator<<(std::ostream &os, const Mine &m);


protected:
    string mineID;
    string mineName;
    string nearestTown;
    string mineStatus;
    Date mineStatusDate;

public:
    ~Mine();
    Mine(string = "0000000", string = "unknown", string = "unknown", string = "Abandoned",
         Date = Date(1900, 1, 1));

    string getMineID() const { return mineID; }
    string getMineName() const { return mineName; }
    string getNearestTown() const { return nearestTown; }
    string getMineStatus() const  { return mineStatus; }
    Date getStatusDate() const { return mineStatusDate; }
    void setMineID(string mID);
    void setMineStatus(string mStat);
    bool operator>(Mine &m);
    bool operator<(Mine &m);
    bool operator==(Mine &m);

    virtual void execReport1(ostream & = std::cout) const;

};

以及重载比较:

bool Mine::operator<(Mine &m)
{
    return getMineID() < m.getMineID();
}

bool Mine::operator>(Mine &m)
{
    return getMineID() > m.getMineID();
}

bool Mine::operator==(Mine &m)
{
    return getMineID() == m.getMineID();
}

您缺少 const 个限定符。

将函数更改为:

bool operator<(Mine const& m) const;
bool operator>(Mine const& m) const;
bool operator==(Mine const& m) const;