Я пытаюсь перегрузить оператор >>, но у меня есть большая ошибка, когда я пытаюсь скомпилироватьперегрузка оператора 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', поэтому вам следует передать неконстантную ссылку на оператора. – Useless