我不熟悉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作爲右側傳遞。
從你的錯誤信息中,我想你嘗試使用第二種類型,就像我在這個例子中寫的那樣,就好像它是第一種類型一樣。
我認爲你的函數聲明與你實際的方法定義有很大的不同。這就是問題出現的原因。 –