'How can I fix my C++ code to calculate Complex numbers?

I have got some problems with my main.cpp.There are some places where I do not know what I have to write to make my code work well. I will write in my code where the problems are. I write the Problem word where my code is wrong. Does anybody have an idea what I have to change to make my code work? My code is about Complex numbers add,sub,divide,mul.

Komolex.h :

#pragma once
#include <iostream>

class NullDivision : public std::exception{};

class Complex{
    private:
        int n, d;
    public:
        Complex(int _n = 0, int _d = 1) : n(_n), d(_d)
        {
            if(d == 0)
            {
                throw NullDivision();
            }
        }

        Complex add(const Complex &b) const
        {
            Complex c(n + b.n , d + b.d);
            return c;
        }

        Complex sub(const Complex &b) const
        {
            Complex c(n - b.n , d - b.d);
            return c;
        }

        Complex mul(const Complex &b) const
        {
            Complex c(n * b.n - d * b.d ,n * b.d - d * b.n );
            return c;
        }

        Complex div(const Complex &b) const
        {
            if(b.n == 0 || b.d == 0)
            {
                throw NullDivision();
            }
            Complex c((n * d + d * b.d ) / (b.n * b.n + b.d * b.d ), (d * b.n + n * b.d )/(b.n * b.n + b.d * b.d));
            return c;
        }


        friend Complex operator+(const Complex &a, const Complex &b)
        {
            return Complex(a.n + b.n , a.d + b.d);
        }
        friend Complex operator-(const Complex &a, const Complex &b)
        {
            return Complex(a.n - b.n , a.d - b.d);
        }
        friend Complex operator*(const Complex &a, const Complex &b)
        {
            return Complex(a.n * b.n - a.d * b.d ,a.n * b.d - a.d * b.n );
        }
        friend Complex operator/(const Complex &a, const Complex &b)
        {
            if(b.n == 0)
            {
                throw NullDivision();
            }
            return Complex((a.n * a.d + a.d * b.d ) / (b.n * b.n + b.d * b.d ), (a.d * b.n + a.n * b.d )/(b.n * b.n + b.d * b.d));

        }
        friend std::ostream& operator<< (std::ostream& o, const Complex &a)
        {
            o << "(" << a.n << "/" << a.d << ")";
            return o;
        }
    
};

main.cpp :



#include <iostream>
#include "Komplex.h"
using namespace std;

int main()
{   bool fut = false;
    int szam;
    while (fut == false){
        cout << "1.Komplex számok összeadása" << endl;
        cout << "2.Komplex számok kivonása" << endl;
        cout << "3.Komplex számok szorzása"<< endl;
        cout << "4.Komplex számok osztása"<< endl;
        cout << "5.Kilépés"<< endl;
        cout << "Írjon be egy sorszámot!"<< endl;
        cin >> szam;

        if(szam == 5)
        {
            fut=true;
            break;
        }

    cout << endl;

    Complex n, d;
    cout << "Adja meg az első szám valós részét" << endl;
    cin >> n.a;  // Problem
    cout << "Adja meg az első szám képzetes részét" << endl;
    cin >> n.b; // Problem
    cout << "Adja meg a második szám valós részét" << endl;
    cin >> d.a; // Problem 
    cout << "Adja meg a második szám képzetes részét" << endl;
    cin >> d.b; // Problem

    Complex eredmeny;
    switch(szam){
        case 1:
            eredmeny = n + d;
            cout << "Az eredmény:" << eredmeny.a << + eredmeny.b << "i" << endl << endl;
            break;
        case 2:
            eredmeny = n - d;
            cout << "Az eredmény:" << eredmeny.a << + eredmeny.b << "i" << endl << endl;
            break;
        case 3:
            eredmeny = n * d;
            cout << "Az eredmény:" << eredmeny.a << + eredmeny.b << "i" << endl << endl;
            break;
        case 4:
        try {
            eredmeny = n / d;
            cout << "Az eredmény:" << eredmeny.a << + eredmeny.b << "i" << endl << endl;
        }
        catch(NullDivision e){std::cout << "NullDivision"<< std::endl;}

         std::cout << std::endl;
        break;
    
        }

    }
    return 0;
}



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source