我想重載operator >>但我有一個很大的錯誤,當我嘗試編譯超載運營商的I/O probblem
std::istream& operator>>(std::istream & is)
{
string str;
is>>str;
vector<Cord> v;
cout<<str<<endl;
bool test=testeur(str, v);
if (test)
{
for (unsigned int i=0;i<v.size();i++)
table.push_back(v[i]);
}
return is;
}
我主:
istringstream tmp2 ("(0,0) > (0,1)");
tmp2 >> x1;
我得到這個錯誤: TEST.CPP:473:9:錯誤:不對應的 '運營商>>' 在 'TMP2 >> X1' TEST.CPP:473:9:注:考生:
現在我嘗試這樣做:
friend std::istream& operator>>(std::istream & is, const CGPS & rhs)
{
string str;
is>>str;
vector<CCoord> v;
cout<<str<<endl;
bool test=testeur(str, v);
if (test)
{
for (unsigned int i=0;i<v.size();i++)
rhs. Add (v[i]);
}
return is;
}
,我得到這個錯誤:
test.cpp: In function ‘std::istream& operator>>(std::istream&, const CGPS&)’: test.cpp:448:29: error: cannot call member function ‘bool CGPS::testeur(std::string, std::vector&)’ without object test.cpp:452:23: error: no matching function for call to ‘CGPS::Add(CCoord&) const’ test.cpp:452:23: note: candidate is: test.cpp:106:12: note: CGPS& CGPS::Add(CCoord) test.cpp:106:12: note: no known conversion for implicit ‘this’ parameter from ‘const CGPS*’ to ‘CGPS*’
我猜這是一個成員函數。它必須是一個自由函數,所以'std :: istream&'是第一個參數。 – chris
謝謝。我不明白你的意思是什麼意思。 – bandera
您現在正在嘗試從一個免費函數調用CGPS類的方法,而不提供實例。它應該是'bool test = rhs.testeur(str,v)',所以你可以在你的實例上調用該方法。另外,你將修改'rhs'實例,所以你應該傳遞一個非const引用給操作符。 – Useless