使用重载运算符的二进制表达式的无效操作数
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;
编辑:我已经通读了 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;