Hello, I am currently having two errors that I just can't seem to figure out. The first is error code C2504 " 'Expr' base class undefined" and the second is error code c2248 " 'Expr' :: 'Expr' cannot access private member declared in class 'Expr'."

My program uses a hierarchy of classes to store mathematical expressions, which can be evaluated using a visitor class. Expr is a virtual class that holds all expressions, literal, binary, and unary. Binary is a subclass of Expr, and holds all binary operations, such as addition, subtraction, and multiplication. Add is a subclass of Binary, and uses pointers _left and _right to hold its operands. Each class is also located in its own .h file.

I have pasted the code below, and noted where the error occurs. I would greatly appreciate any help. I've been stuck on this one for at least 8 hours, and I know the solution can't be that difficult

//code for Expr.h

#ifndef EXPR

#define EXPR

class Visitor;

#include "Visitor.h"

class Expr

{

public:

virtual void Accept(Visitor&) = 0;

~Expr();

private:

Expr();

Expr(Expr&);

};

#endif

//code for Binary.h

#ifndef BINARY

#define BINARY

#include "Expr.h"

class Binary: public Expr

{

public:

virtual void Accept(Visitor&) = 0;

Expr* getright();

Expr* getleft();

~Binary();

protected:

Binary(Expr* left, Expr* right): _left(left), _right(right){};

private:

Expr* _left;

Expr* _right;

Binary();

Binary(Binary&);

};

#endif

//code for Add.h

#ifndef ADD

#define ADD

#include "Expr.h"

#include "Binary.h"

class Add: public Binary

{

public:

Add(Expr* left, Expr* right): _left(left), _right(right){};

Expr* getright()

{

return _right;

}

Expr* getleft()

{

return _left;

}

~Add();

Add();

virtual void Accept(Visitor& v) {v.visitadd(this);}

private:

Expr* _left;

Expr* _right;

Add(Add&);

};

#endif