Tra*_*xys 0 c++ overloading operator-overloading
我做了一个简单的struct命名coord来保持,坐标很好,我想检查两个坐标是否相等,所以我看了如何在另一个线程中做一个正确的运算符重载并想出了这个:
#include <iostream>
using namespace std;
struct coord{
int x;
int y;
inline bool operator==(const coord& lhs, const coord& rhs){
if(lhs.x == rhs.x && lhs.y == rhs.y){
return true;
}
else{
return false;
}
}
};
int main(){
coord a,b;
a.x=5;
a.y=5;
b.x=a.x;
b.y=a.y;
if(a==b){
cout<<"Working"<<endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但在编译时我得到了一个巨大的错误,看起来像:
g++ -c -o obj/main.o main.cpp -I../include
main.cpp:8:62: error: ‘bool coord::operator==(const coord&, const coord&)’ must take exactly one argument
inline bool operator==(const coord& lhs, const coord& rhs){
^
main.cpp: In function ‘int main()’:
main.cpp:24:6: error: no match for ‘operator==’ (operand types are ‘coord’ and ‘coord’)
if(a==b){
^
main.cpp:24:6: note: candidates are:
In file included from /usr/include/c++/4.9.2/iosfwd:40:0,
from /usr/include/c++/4.9.2/ios:38,
from /usr/include/c++/4.9.2/ostream:38,
from /usr/include/c++/4.9.2/iostream:39,
from main.cpp:1:
/usr/include/c++/4.9.2/bits/postypes.h:216:5: note: template<class _StateT> bool std::operator==(const std::fpos<_StateT>&, const std::fpos<_StateT>&)
operator==(const fpos<_SenttateT>& __lhs, const fpos<_StateT>& __rhs)
^
Run Code Online (Sandbox Code Playgroud)
这继续作为各种其他标准的东西,‘coord’ is not derived from ‘const std::basic_string<_CharT, _Traits, _Alloc>’或者‘const std::allocator<_CharT>’,整个错误在这里很长,它在pastebin上.
我希望有人知道这里出了什么问题,可以向我解释
有几种方法可以解决这个问题:
会员职能
inline bool operator==(const coord& rhs) const {
return (this->x == rhs.x && this->y == rhs.y);
}
Run Code Online (Sandbox Code Playgroud)
当你使用
if(a==b){
Run Code Online (Sandbox Code Playgroud)
函数在对象a上调用,函数的参数是b.
非会员功能
这可以在定义之外定义struct coord.
struct coord{
int x;
int y;
};
bool operator==(const coord& lhs, const coord& rhs){
return (lhs.x == rhs.x && lhs.y == rhs.y);
}
Run Code Online (Sandbox Code Playgroud)
当你使用
if(a==b){
Run Code Online (Sandbox Code Playgroud)
使用afor lhs和bfor 调用该函数rhs.