Возникла проблема с кодом 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();

Так оно будет компилироваться.

Будет ли работать — не знаю, с этой точки зрения (верно ли написан класс) я ваш код не смотрел.

→ Ссылка