我不熟悉C ++,我的导师提供了一个我很困惑的功能
operator long (void);
long operator == (Base & base) {
return ! strcmp (name, base);
}
据我所知,运营商正在对2个Base对象进行比较?或者我错了? 当我调用函数本身时,它告诉我没有这样的函数调用。
我调用它返回此错误的函数
没有......运算符的匹配函数(Base *&,Base&)
答案 0 :(得分:3)
该函数未命名为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 :(得分:1)
有两种方法可以重载运算符。
1.它可以是班级成员或
2.可以在课外
调用重载运算符函数的方式取决于您使用的方式。 在你的情况下,它似乎是在类内部,但我认为声明中有一些错误,并且没有正确声明。 检查此问题链接可能有用 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)
认为这很有用
答案 2 :(得分:0)
您可以通过两种方式定义此运算符。首先是你的基类。
class Base
{
public:
long operator==(Base &base);
}
long Base::operator==(Base &base)
{
...
}
,第二个在任何课程之外,
long operator==(Base &left, Base &right)
{
...
}
请注意,在任何类之外声明的那个必须带两个参数,而类中的一个必须只带一个。当你这样打电话时,
base1 == base2;
如果使用第一个版本,则base1是调用运算符的对象,base2作为参数传递。
如果使用第二个版本,则base1作为left传递,base2作为right传递。
从您的错误消息中,我想您尝试使用我在本示例中编写的第二种类型,就像它是第一种类型一样。