c – 结构的比较运算符重载,对称地将我的结构与int类型进行比较
发布时间:2020-12-16 09:44:15 所属栏目:百科 来源:网络整理
导读:我试图重载这些运算符: , =,==, =,,也许以后!=, 在结构中. 似乎将结构的对象与同一结构的另一个对象进行比较很容易,因为当为该场景重载运算符时,该定义是自动对称的. 但是,如果我想将我的struct FOOD与int进行比较呢? 只要FOOD首先出现,这也很容易,但是,
我试图重载这些运算符:
<,< =,==,> =,>,也许以后!=, 在结构中. 似乎将结构的对象与同一结构的另一个对象进行比较很容易,因为当为该场景重载运算符时,该定义是自动对称的. 但是,如果我想将我的struct FOOD与int进行比较呢? 我意识到了 bool operator> (const int &,const FOOD &) const; 由于“不止一个论点”的事情而存在问题.我明白了. 在我遍布各个论坛的所有论坛上,每个人的解决方案似乎都在使用朋友,但他们的困难总是在课程的背景下,而不是结构.如何为s结构做? 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 解决方法
在FOOD结构之外定义它:
bool operator> (const int &i,const FOOD &f) {return i > f.foodID;} 不要忘记从FOOD结构中删除这个错误的声明: bool operator> (const int &,const FOOD &) const; // <--- remove it 和相应的定义: bool FOOD::operator> (const int &i,const FOOD &f) const {return i > f.foodID;} // <--- remove it 对其他运算符重复相同的操作. 解 你声称你理解“不止一个论点”.然而,事实证明你没有.我不明白为什么你有麻烦理解这里的编译器和2个人告诉你什么,但这里是解决方案的样子: struct FOOD { int foodID; double price; bool operator> (const FOOD &) const; bool operator>=(const FOOD &) const; bool operator==(const FOOD &) const; bool operator<=(const FOOD &) const; bool operator< (const FOOD &) const; bool operator> (const int &) const; bool operator>=(const int &) const; bool operator==(const int &) const; bool operator<=(const int &) const; bool operator< (const int &) const; }; bool FOOD::operator> (const FOOD &f) const {return foodID > f.foodID;} bool FOOD::operator>=(const FOOD &f) const {return foodID >= f.foodID;} bool FOOD::operator==(const FOOD &f) const {return foodID == f.foodID;} bool FOOD::operator<=(const FOOD &f) const {return foodID <= f.foodID;} bool FOOD::operator< (const FOOD &f) const {return foodID < f.foodID;} bool FOOD::operator> (const int &i) const {return foodID > i;} bool FOOD::operator>=(const int &i) const {return foodID >= i;} bool FOOD::operator==(const int &i) const {return foodID == i;} bool FOOD::operator<=(const int &i) const {return foodID <= i;} bool FOOD::operator< (const int &i) const {return foodID < i;} bool operator> (const int &i,const FOOD &f) {return i > f.foodID;} bool operator>=(const int &i,const FOOD &f) {return i >= f.foodID;} bool operator==(const int &i,const FOOD &f) {return i == f.foodID;} bool operator<=(const int &i,const FOOD &f) {return i <= f.foodID;} bool operator< (const int &i,const FOOD &f) {return i < f.foodID;} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |