[英]C++ overloading >> operator strange compile error
#include <iostream>
#include <string>
using namespace std;
class phonebook
{
string name;
string prefix;
public:
phonebook(string &name, string &prefix)
{
this->name = name;
this->prefix = prefix;
}
friend istream &operator>>(istream &in, phonebook &book);
};
istream &phonebook::operator>>(istream &in, phonebook &book)
{
in >> book.name >> book.prefix;
return in;
}
int main()
{
return 0;
}
當我嘗試使用g ++ 4.6.1編譯此代碼時:
“main.cpp:20:錯誤:'std :: istream&phonebook :: operator >>(std :: istream&,phonebook&)'必須只接受一個參數”
PS:這是非常愚蠢的事情......很明顯:S。 謝謝你。
您不能重載operator >>
for streaming作為成員函數。 任何被定義為成員函數的運算符都將其第一個參數作為對(const)Type的引用,其中Type是您的類名 - 在本例中為phonebook。
你需要改變
istream &phonebook::operator>>(istream &in, phonebook &book)
至
istream & operator>>(istream &in, phonebook &book)
friend
功能不是會員。 實際上,它期望>>
運算符的左側是phonebook
。 將函數定義的第一行(類外)更改為:
istream &operator>>(istream &in, phonebook &book)
請注意,沒有phonebook::
因為它不是會員。
phonebook
沒有一個叫做opeartor>>
的方法
您聲明存在一個全局函數,它是phonebook
的朋友,因此,您應該從operator>>
的實現中刪除phonebook::
因為你宣布了friend istream &operator>>(istream &in, phonebook &book);
所以這個運營商>>不是電話簿的成員功能。
從C ++ 03標准引用
11.4朋友類的朋友是一個函數或類,它不是類的成員,但允許使用類中的私有和受保護的成員名。 朋友的名稱不在類的范圍內,並且除非成員是另一個類的成員,否則不會使用成員訪問運算符(5.2.5)調用該朋友。
所以刪除phonebook::
會工作:
istream& operator>>(istream &in, phonebook &book)
{
in >> book.name >> book.prefix;
return in;
}
當你在類中聲明一個朋友的函數時,你要么在類中定義它,要么使它成為非成員函數。
istream & operator>>(istream &in, phonebook &book)
{
in >> book.name >> book.prefix;
return in;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.