我不熟悉C++,和我的教练提供的,我很困惑重载运算符函数==
operator long (void);
long operator == (Base & base) {
return ! strcmp (name, base);
}
据我所知,运营商正在做2基地的比较功能对象?还是我错了? 当我调用函数本身时,它告诉我没有这样的函数调用。
我把它返回该错误
为...操作没有匹配功能(基础×&,基地&)
我不熟悉C++,和我的教练提供的,我很困惑重载运算符函数==
operator long (void);
long operator == (Base & base) {
return ! strcmp (name, base);
}
据我所知,运营商正在做2基地的比较功能对象?还是我错了? 当我调用函数本身时,它告诉我没有这样的函数调用。
我把它返回该错误
为...操作没有匹配功能(基础×&,基地&)
函数没有被命名operator
,它的命名operator==
功能。这是一个overloaded comparison operator。你只需要调用它像这样:
Base a, b;
if(a==b) // <-- this is the function call
std::cout<<"equal"<<std::endl;
else
std::cout<<"not equal"<<std::endl;
当然是这样的话,当函数是成员Base
类的。你没有提供所有的代码,所以我猜测它是。
最重要的是,你的代码的第一行是另一个重载操作符(将类转换为long
)的声明,它的实现是在其他地方(可能)提供的。
重载运算符有两种方法。
1.It可以是一个类的成员或
2.It可以在课堂以外
方式调用重载运算功能的依赖和您所使用的方式有所不同。 在你的情况下,它似乎是在课堂上,但我想在宣言中有错误,并没有正确申报。 检查这个问题的环节可能是有用的 Operator overloading outside class
long operator == (Base &base); // this should be your declaration inside your class
//definition
long operator == (Base &base){
return !strcmp(name,base.name);
}
,你可以简单地通过
obj1==obj2 or obj1.operator==(obj2)
把它在你的类的对象觉得这是非常有用的
请注意:如果您比较字符串相等,那么它应该是!strcmp()。 – Sayutee
您可以定义这个操作符两种方式。首先是你的基类。
class Base
{
public:
long operator==(Base &base);
}
long Base::operator==(Base &base)
{
...
}
,第二个是任何类外,
long operator==(Base &left, Base &right)
{
...
}
注意,任何类外部声明的一个必须考虑两个参数,类里面的一个必须只有一个。当你这样称呼它,
base1 == base2;
如果你使用的第一个版本,BASE1是在运营商被称为对象,BASE2被作为参数传递。
如果您使用第二个版本,则base1作为左侧传递,base2作为右侧传递。
从你的错误信息中,我想你尝试使用第二种类型,就像我在这个例子中写的那样,就好像它是第一种类型一样。
我认为你的函数声明与你实际的方法定义有很大的不同。这就是问题出现的原因。 –