Я пишу заголовок комплексных чисел с нуля для школьного класса, но я застрял в перегрузке операторов извлечения и вставки, я много читал на эту тему, но до сих пор не понимаю
friend ostream& operator << (ostream &tmp, Cmplx ¶m)
{
tmp<<param.Re<<"+"<<param.Im<<"i";
return tmp;
}
friend istream& operator >> (istream &tmp, Cmplx ¶m)
{
tmp>>param.Re;
tmp>>param.Im;
return tmp;
}
Но когда я пытаюсь скомпилировать, я получаю.
no match for 'operator<<' in 'std::cout << Cmplx<vartype>::operator+(Cmplx<vartype>) [with vartype = long double](Cmplx<long double>(((const Cmplx<long double>&)((const Cmplx<long double>*)(& B)))))'
Заранее спасибо
EDIT:
Реализация:
#include"cmplx oper.hpp"
using namespace std;
int main()
{
Cmplx<long double> A, B;
cin >> A;
cin >> B;
cout<<(A+B)<<(A-B)<<(A*B)<<(A/B)<<(A+B).norm<<(A+B).pol<<(A+B).conj<<(A+B).re<<(A+B).im<<endl;
getch();
return true;
}
Также в модификации я изменил параметр на const:
friend ostream& operator << (ostream &tmp, Cmplx const ¶m)
{
tmp<<param.Re<<"+"<<param.Im<<"i";
return tmp;
}
Все еще не работает
РЕДАКТИРОВАТЬ 2:
Я сломал строку cout и обнаружил, что проблема заключалась в том, что в моем классе была пара методов, а не использование оператора «+».
Я до сих пор не знаю, почему, но по крайней мере я мог бы скомпилировать.
Кроме того, мне интересно, могу ли я получить конкретный стиль ввода для своего класса, я имею в виду что-то вроде
scanf("%d+%di",Re,Im);
Но с использованием cin (я не могу или, по крайней мере, не знаю, как использовать scanf
, поскольку это шаблон, и довольно неудобно писать конкретный cin для каждого типа данных)
РЕДАКТИРОВАТЬ 3:
Я нашел проблему, отсутствие скобок.