Hel*_*est 4 c++ struct operator-overloading
我试图重载这些操作符:
<
,<=
,==
,>=
,>
,也许以后!=
,在一个结构.
似乎将结构的对象与同一结构的另一个对象进行比较很容易,因为当为该场景重载运算符时,该定义是自动对称的.
但是,如果我想我的结构比较FOOD
到int
?这个也很容易FOOD
,但是,当int出现时,情况怎么样?我怎么定义没有g ++给我这么多"必须包含一个参数"的错误?
我意识到了
bool operator> (const int &, const FOOD &) const;
Run Code Online (Sandbox Code Playgroud)
由于"不止一个论点"的事情而存在问题.我明白了.
在我搜索的所有论坛中,每个人的解决方案似乎都在使用friend
,但他们的困难总是在课程的背景下,而不是结构.如何为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
Run Code Online (Sandbox Code Playgroud)
g++
给我这些错误:
structsTransAndFood.cc:64:45: error: ‘bool FOOD::operator>(const int&, const FOOD&) const’ must take exactly one argument
Run Code Online (Sandbox Code Playgroud)
在FOOD
结构之外定义它:
bool operator> (const int &i, const FOOD &f) {return i > f.foodID;}
Run Code Online (Sandbox Code Playgroud)
不要忘记从FOOD
结构中删除这个错误的声明:
bool operator> (const int &, const FOOD &) const; // <--- remove it
Run Code Online (Sandbox Code Playgroud)
和相应的定义:
bool FOOD::operator> (const int &i, const FOOD &f) const {return i > f.foodID;} // <--- remove it
Run Code Online (Sandbox Code Playgroud)
对其他操作员重复相同的操作.
你声称你理解"不止一个论点".然而,事实证明你没有.我不明白为什么你有麻烦理解这里的编译器和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;}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11345 次 |
最近记录: |