2014-02-07 90 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作爲右側傳遞。

從你的錯誤信息中,我想你嘗試使用第二種類型,就像我在這個例子中寫的那樣,就好像它是第一種類型一樣。