我有一个像下面这样的对象
class MyClass{
int a;
double b;
};
Run Code Online (Sandbox Code Playgroud)
和
vector<MyClass> vMyClass;
Run Code Online (Sandbox Code Playgroud)
然后我想在vMyClass中搜索尝试使用算法函数:
if( std::find(vMyClass.begin(), vMyClass.end(), aiField) == vMyClass.end())
Run Code Online (Sandbox Code Playgroud)
我也定义了 operator==
int operator ==(Field &Left,Field &Right)
{
return memcmp(&Left,&Right,sizeof(Field));
}
Run Code Online (Sandbox Code Playgroud)
要么
int operator ==(Field &Right)
{
return memcmp(this,&Right,sizeof(Field));
}
Run Code Online (Sandbox Code Playgroud)
但是我收到一条错误消息.
1>c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\algorithm(40) : error C2678: binary '==' : no operator found which takes a left-hand operand of type 'MyClass' (or there is no acceptable conversion)
1> C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\guiddef.h(192): could be 'int operator ==(const GUID &,const GUID &)' [found using argument-dependent lookup]
1> c:\users\shmuelian\documents\visual studio 2008\projects\src\examples\DLgenerator\DLParser.h(85): or 'int operator ==(MyClass &,MyClass &)' [found using argument-dependent lookup]
1> c:\users\shmuelian\documents\visual studio 2008\projects\src\examples\DLgenerator\DLParser.h(70): or 'int MyClass::operator ==(MyClass &)'
1> while trying to match the argument list '(MyClass, const MyClass)'
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\algorithm(74) : see reference to function template instantiation '_InIt std::_Find<std::_Vector_iterator<_Ty,_Alloc>,_Ty>(_InIt,_InIt,const _Ty &)' being compiled
1> with
1> [
1> _InIt=std::_Vector_iterator<MyClass,std::allocator<MyClass>>,
1> _Ty=MyClass,
1> _Alloc=std::allocator<MyClass>
1> ]
1> c:\users\shmuelian\documents\visual studio 2008\projects\src\examples\DLgenerator\DLParser.h(108) : see reference to function template instantiation '_InIt std::find<std::_Vector_iterator<_Ty,_Alloc>,MyClass>(_InIt,_InIt,const _Ty &)' being compiled
1> with
1> [
1> _InIt=std::_Vector_iterator<MyClass,std::allocator<MyClass>>,
1> _Ty=MyClass,
1> _Alloc=std::allocator<MyClass>
1> ]
1>CommandArgParser.cpp
1>Generating Code...
Run Code Online (Sandbox Code Playgroud)
Pup*_*ppy 14
它们需要是const引用.而且memcmp是真的,真的bad-只是执行成员明智的比较.
你忘记了运算符中的const限定符==,加上它应该返回bool,而不是int.只需使用它:
bool operator ==(const Field &Left, const Field &Right)
{
return (Left.a == Right.a) && (Left.b == Right.b);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3731 次 |
| 最近记录: |