Как исправить ошибку допуска к переменной класса?
Доброго времени суток товарищи, подскажите пожалуйста, почему в friendly функции оператора "<<" выдаёт ошибку допуска?
//Header.h
class Complex {
private: double a, bi, f, r;//z = a+bi, f-угол, r-модуль числа
public:
Complex();
Complex(double a, double bi);
~Complex();
friend ostream& operator <<(ostream &os, Complex &v);
friend istream& operator >>(istream &is, Complex &vv);
Complex operator +(const Complex& l);
Complex operator -(const Complex& l);
Complex operator *(const Complex& l);
Complex operator /(const Complex& l);
void SetCel(double a);
double GetCel();
void SetMni(double b);
double GetMni();
};
Complex :: ~Complex() {};
Complex::Complex() {
double a = 0;
double bi = 0;
double f = 0;
double r = 0;
};
Complex::Complex(double a, double bi) {
double a = a;
double bi = bi;
double f = 0;
double r = 0;
}
void Complex::SetCel(double a) {
cout << "Введите первое комплексное число, сначала целую часть\n";
cin >> a ;
}
double Complex::GetCel() {
return a;
}
void Complex::SetMni(double b) {
cout << "Теперь мнимую часть(без i)\n";
cin >> bi;
}
double Complex::GetMni() {
return bi;
}
ostream& operator <<(ostream& os, Complex& v) {
cout << v.a << " + i(" << v.bi << ")\n";
return cout;`
}
Complex operator +(const Complex& l) {
Complex Z;
Z.a = a + a.x;
Z.bi = bi + l.bi;
return Z;
}```
Ответы (2 шт):
Автор решения: Harry
→ Ссылка
Не вдаваясь в математику, исправил только программные ошибки. Инициализацию использовать не стал, раз и вы к ней не прибегаете. Посмотрите, сравните и разберитесь, почему я сделал те или иные изменения - это несложно, но очень полезно...
class Complex {
private: double a, bi, f, r;//z = a+bi, f-угол, r-модуль числа
public:
Complex();
Complex(double a, double bi);
~Complex();
friend ostream& operator <<(ostream &os, Complex &v);
friend istream& operator >>(istream &is, Complex &vv);
Complex operator +(const Complex& l);
Complex operator -(const Complex& l);
Complex operator *(const Complex& l);
Complex operator /(const Complex& l);
void SetCel();
double GetCel();
void SetMni();
double GetMni();
};
Complex :: ~Complex() {};
Complex::Complex() {
a = 0;
bi = 0;
f = 0;
r = 0;
};
Complex::Complex(double a_, double bi_) {
a = a_;
bi = bi_;
f = 0;
r = 0;
}
void Complex::SetCel() {
cout << "Введите первое комплексное число, сначала целую часть\n";
cin >> a ;
}
double Complex::GetCel() {
return a;
}
void Complex::SetMni() {
cout << "Теперь мнимую часть(без i)\n";
cin >> bi;
}
double Complex::GetMni() {
return bi;
}
ostream& operator <<(ostream& os, Complex& v) {
os << v.a << " + i(" << v.bi << ")\n";
return os;
}
Complex Complex::operator +(const Complex& l) {
Complex Z;
Z.a = a + l.a;
Z.bi = bi + l.bi;
return Z;
}
Автор решения: Тимур Досов
→ Ссылка
Может прикастовать: ostream& operator <<(ostream& os, Complex& v) { os << (double)v.a << " + i(" << (double)v.bi << ")\n"; return os; } ? а в операторе >> прикастовать ссылку: (double&)v.a и (double&)v.bi