Я пытаюсь перегрузить оператор на C++, но у меня возникают некоторые трудности. Это то, что я имею в своем классе:Перегрузка оператора в C++ «<<»
ostream & operator <<(ostream & s)
{
s << w();
return s;
}
string w()
{
stringstream ss;
string str;
for (int i=n-1; i>=0; i--)
{
if (i==n-1)
{
ss<<tablica[i] << "x^" << i;
}
else
{
if (tablica[i]<eps && tablica[i]>-eps) ss <<"+" << +tablica[i]<< "x^" << i;
else if (tablica[i]<eps)ss << tablica[i]<< "x^" << i;
if(tablica[i]>eps) ss <<"+" << +tablica[i]<< "x^" << i;
}
}
ss >> str;
return str;
}
Я пытаюсь использовать это так:
cout << p << endl;
Ошибка: no match for 'operator<<' in 'std::cout << p
Вот весь мой код программы: http://codepad.org/xBijPMCp
Параметр 'operator <<' должен быть * вещью справа *. –
Кстати, вы используете неправильную форму 'delete'. Это неопределенное поведение. Вы также не следуете правилу 3/5, что также приводит к неопределенному поведению. Просто используйте вектор вместо этого жалкого указателя, и вам больше не понадобится деструктор. Это уже более короткий, более чистый, более безопасный код, moreso, когда вы учитываете другие функции, которые у вас есть, но не делайте этого. – chris
На самом деле, прокручивая больше, я просто понял, что это базовый класс. Он должен иметь виртуальный деструктор, хотя с вектором или чем-то, он может быть таким же простым, как '~ ClassName() = default;'. – chris