Возникла проблема с кодом Display
//Source.cpp
#include "Complex.h"
#include "Complex.cpp"
int main()
{
Complex A;
Complex B(2.5, 5);
Read(A);
cout << "A = ";
Display(A);
cout << "B = ";
Display(B);
cout << "A - B = ";
A.sub(A, B);
cout << "A / B = ";
A.div(A, B);
cout << "Conjugate A = ";
A.conj(A);
}
//Complex.h
#pragma once
#include <iostream>
#include <string>
using namespace std;
class Complex
{
private:
double x;
double y;
public:
Complex();
Complex(double f, double s);
Complex(const Complex&);
int get_x() const { return x; }
int get_y() const { return y; }
void set_x(double value) { x = value; }
void set_y(double value) { y = value; }
Complex sub(Complex&, Complex&);
Complex div(Complex&, Complex&);
Complex conj(Complex&);
void Display(Complex& R);
void Read(Complex& R);
};
//Complex.cpp
#include "Complex.h"
Complex::Complex()
{
x = 0;
y = 0;
}
Complex::Complex(double f, double s)
{
x = f;
y = s;
}
Complex::Complex(const Complex& R)
{
x = R.x;
y = R.y;
}
Complex Complex::sub(Complex& R1, Complex& R2)
{
Complex T = Complex(R1.x - R2.x, R1.y - R2.y);
Display(T);
return Complex();
}
Complex Complex::div(Complex& R1, Complex& R2)
{
Complex T = Complex((R1.x * R2.x + R1.y * R2.y) / (R2.x * R2.x + R2.y * R2.y), (R2.x * R1.y - R1.x * R2.y) / (R2.x * R2.x + R2.y * R2.y));
Display(T);
return Complex();
}
Complex Complex::conj(Complex& R)
{
Complex T = Complex(R.x, R.y * -1);
Display(T);
return Complex();
}
void Display(Complex& R)
{
cout << R.x;
if (R.y < 0)
cout << R.y;
else
cout << "+" << R.y;
cout << "i" << endl;
}
void Read(Complex& R)
{
double N1, N2;
cout << "enter X "; cin >> N1;
cout << "enter Y "; cin >> N2;
Complex T(N1, N2);
R = T;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Начните с того, что уберите этот ужас —
#include "Complex.cpp"
из Source.cpp. Вам надо ошибок двойного определения?
Затем таки решите — Display и Read функции-члены или нет?
Если нет — сделайте их друзьями:
Complex div(Complex&, Complex&);
Complex conj(Complex&);
friend void Display(Complex& R);
friend void Read(Complex& R);
};
Если же да — объявление класса меняем как
Complex div(Complex&, Complex&);
Complex conj(Complex&);
void Display();
void Read();
};
в Complex.cpp сделайте их членами —
void Complex::Display()
{
cout << x;
if (y < 0)
cout << y;
else
cout << "+" << y;
cout << "i" << endl;
}
void Complex::Read()
{
double N1, N2;
cout << "enter X "; cin >> N1;
cout << "enter Y "; cin >> N2;
Complex T(N1, N2);
*this = T;
}
и вызывайте их верно —
A.Read();
cout << "A = ";
A.Display();
cout << "B = ";
B.Display();
И все
Display(T);
замените на
T.Display();
Так оно будет компилироваться.
Будет ли работать — не знаю, с этой точки зрения (верно ли написан класс) я ваш код не смотрел.