I'm having trouble with this piece of code which shall evaluate numeric operations. I tried searching, but no answer seemed to be helpful.
The base class to represent an operation is:
Operacija.h:
#pragma once
#include <iostream>
using namespace std;
class Operacija
{
protected:
    char* naziv;
    int drugiO;
    Operacija* suprotna;
public:
    Operacija* retOp() { return this->suprotna; }
    int retD() { return this->drugiO; }
    void printOp()
    {
        cout << "Ime operacije: " << this->naziv << endl;
        cout << "Drugi operand: " << this->drugiO << endl;
        cout << "Ime suprotne operacije: " << this->suprotna->naziv << endl;
    }
    virtual int DoOperation(int op1, int op2) = 0;
};
This derived class is for multiplication:
Mnozenje.h:
//this is .h for 1st class
#pragma once
#include "Operacija.h"
#include "Deljenje.h"
class Mnozenje : public Operacija
{
public:
    Mnozenje(int b);
    int DoOperation(int op1, int op2);
};
Mnozenje.cpp:
#include "Deljenje.h"
#include "Mnozenje.h"
class Deljenje;
Mnozenje::Mnozenje(int b)
{
    Deljenje* a = new Deljenje(b);
    naziv = "Mnozenje";
    suprotna = a;
    if (b == 0)
    {
        cout << "operand ne sme biti 0, stoga je stavljen na ";
        cout << "default tj. postavljen na vrednost 1!" << endl;
        drugiO = 1;
    }
    else
        drugiO = b;
}
int Mnozenje::DoOperation(int op1, int op2)
{
    int a = 0;
    a = op1 * op2;
    return a;
}
And this derived class is for division:
Deljenje.h:
#pragma once
#include "Operacija.h"
#include "Mnozenje.h"
class Deljenje : public Operacija
{
public:
    Deljenje(int a);
    int DoOperation(int op1, int op2);
};
Deljenje.cpp:
#include "Deljenje.h"
#include "Mnozenje.h"
class Mnozenje;  
Deljenje::Deljenje(int a)
{
    Mnozenje* b = new Mnozenje(a);
    naziv = "Deljenje";
    suprotna = b;
    if (a == 0)
    {
        cout << "operand ne sme biti 0, stoga je stavljen na default tj.     postavljen na vrednost 1!" << endl;
        drugiO = 1;
    }
    else
        drugiO = a;
}
int Deljenje::DoOperation(int op1, int op2)
{
    int a = 0;
    a = op1 / op2;
    return a;
}
I do understand why this does not work, and I did try with just declaring pointers instead of initialising suprotna member for Mnozenje and Deljenje. But I have another class being a container of an array of type Operacija and I can't have uninitialised pointers, because I need to call some other function using suprotna.
 
     
     
    