我正在尝试重载以下运算符:
似乎与同一结构体的另一个对象进行比较很容易,因为当为该场景重载运算符时,定义会自动对称。
但是如果我想将我的结构体
我意识到:
因为“超过一个参数”的问题而出现了一些问题。我明白这一点。
在我搜索过的所有论坛中,每个人的解决方案似乎都是使用
<
,<=
,==
,>=
,>
,以及可能稍后的 !=
,在一个结构体中。似乎与同一结构体的另一个对象进行比较很容易,因为当为该场景重载运算符时,定义会自动对称。
但是如果我想将我的结构体
FOOD
与一个 int
进行比较呢?只要 FOOD
在前面,这也很容易,但是如果 int 在前面怎么办?如何定义才能避免 g++ 给出太多“必须包含一个参数”的错误?我意识到:
bool operator> (const int &, const FOOD &) const;
因为“超过一个参数”的问题而出现了一些问题。我明白这一点。
在我搜索过的所有论坛中,每个人的解决方案似乎都是使用
friend
,但他们的困难总是在类的上下文中,而不是结构体。如何为结构体完成此操作?struct FOOD {
int foodID;
double price;
bool operator> (const FOOD &) const; //FOOD > FOOD
bool operator>=(const FOOD &) const; //FOOD >= FOOD
bool operator==(const FOOD &) const; //FOOD == FOOD
bool operator<=(const FOOD &) const; //FOOD <= FOOD
bool operator< (const FOOD &) const; //FOOD < FOOD
bool operator> (const int &) const; //FOOD > int
bool operator>=(const int &) const; //FOOD >= int
bool operator==(const int &) const; //FOOD == int
bool operator<=(const int &) const; //FOOD <= int
bool operator< (const int &) const; //FOOD < int
bool operator> (const int &, const FOOD &) const; // int > FOOD
bool operator>=(const int &, const FOOD &) const; // int >= FOOD
bool operator==(const int &, const FOOD &) const; // int == FOOD
bool operator<=(const int &, const FOOD &) const; // int <= FOOD
bool operator< (const int &, const FOOD &) const; // int < FOOD
};
bool FOOD::operator> (const FOOD &f) const {return foodID > f.foodID;}//FOOD > FOOD
bool FOOD::operator>=(const FOOD &f) const {return foodID >= f.foodID;}//FOOD >= FOOD
bool FOOD::operator==(const FOOD &f) const {return foodID == f.foodID;}//FOOD == FOOD
bool FOOD::operator<=(const FOOD &f) const {return foodID <= f.foodID;}//FOOD <= FOOD
bool FOOD::operator< (const FOOD &f) const {return foodID < f.foodID;}//FOOD < FOOD
bool FOOD::operator> (const int &i) const {return foodID > i;} //FOOD > int
bool FOOD::operator>=(const int &i) const {return foodID >= i;} //FOOD >= int
bool FOOD::operator==(const int &i) const {return foodID == i;} //FOOD == int
bool FOOD::operator<=(const int &i) const {return foodID <= i;} //FOOD <= int
bool FOOD::operator< (const int &i) const {return foodID < i;} //FOOD < int
bool FOOD::operator> (const int &i, const FOOD &f) const {return i > f.foodID;}// int > FOOD
bool FOOD::operator>=(const int &i, const FOOD &f) const {return i >= f.foodID;}// int >= FOOD
bool FOOD::operator==(const int &i, const FOOD &f) const {return i == f.foodID;}// int == FOOD
bool FOOD::operator<=(const int &i, const FOOD &f) const {return i <= f.foodID;}// int <= FOOD
bool FOOD::operator< (const int &i, const FOOD &f) const {return i < f.foodID;}// int < FOOD
g++
给我报了以下这些错误:
structsTransAndFood.cc:64:45: error: ‘bool FOOD::operator>(const int&, const FOOD&) const’ must take exactly one argument
operator<
定义所有运算符。 - Mark Ransomint foodID
似乎能够唯一地标识一个FOOD
,因此您可以通过提供一个转换operator int() const;
来消除所有这些比较。 - Drew Dormann