2014-02-07 91 views
0

我不熟悉C++,和我的教练提供的,我很困惑重载运算符函数==

 operator long (void); 
     long operator == (Base & base) { 
     return ! strcmp (name, base); 
      } 

据我所知,运营商正在做2基地的比较功能对象?还是我错了? 当我调用函数本身时,它告诉我没有这样的函数调用。

我把它返回该错误

为...操作没有匹配功能(基础×&,基地&)

+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.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) 

把它在你的类的对象觉得这是非常有用的

+0

请注意:如果您比较字符串相等,那么它应该是!strcmp()。 – Sayutee

0

您可以定义这个操作符两种方式。首先是你的基类。

class Base 
{ 
    public: 
    long operator==(Base &base); 
} 

long Base::operator==(Base &base) 
{ 
    ... 
} 

,第二个是任何类外,

long operator==(Base &left, Base &right) 
{ 
    ... 
} 

注意,任何类外部声明的一个必须考虑两个参数,类里面的一个必须只有一个。当你这样称呼它,

base1 == base2; 

如果你使用的第一个版本,BASE1是在运营商被称为对象,BASE2被作为参数传递。

如果您使用第二个版本,则base1作为左侧传递,base2作为右侧传递。

从你的错误信息中,我想你尝试使用第二种类型,就像我在这个例子中写的那样,就好像它是第一种类型一样。