У меня проблема с операторами. Вообще я знаю основы использования операторов. Но моя проблема начинается, когда я хочу сравнить два объекта. У меня есть 2 разных файла объявлений классов okrag.h и prostokat.h. Я хочу сравнить два объекта из разных классов:
//okrag.h -- circle class
#ifndef __OKRAG_H__
#define __OKRAG_H__
#include "figura.h"
#include "prostokat.h"
class COkrag: public CFigura
{
protected:
int m_iR;
public:
COkrag();
COkrag(int x, int y, int r);
~COkrag();
void ZmienR(int r);
float PodajObwod();
float PodajPole();
int PodajR();
void operator+(int r);
friend void operator+(COkrag o, int x[2]);
bool operator>(COkrag o2);
friend bool operator>(COkrag o1, CProstokat o2);
bool operator<(COkrag o2);
bool operator>=(COkrag o2);
bool operator<=(COkrag o2);
friend ostream& operator << (ostream &wy, COkrag &O);
};
#endif
//prostokat.h
#ifndef __PROSTOKAT_H__
#define __PROSTOKAT_H__
#include "figura.h"
#include "okrag.h"
class CProstokat: public CFigura
{
protected:
int m_iSz, m_iWy;
public:
CProstokat();
CProstokat(int x, int y, int szer, int wys);
~CProstokat();
void ZmienSz(int x);
void ZmienWy(int y);
float PodajObwod();
float PodajPole();
void operator+(int a);
friend void operator+(CProstokat p, int x[2]);
bool operator>(CProstokat p2);
bool operator<(CProstokat p2);
bool operator>=(CProstokat p2);
bool operator<=(CProstokat p2);
friend ostream& operator << (ostream &wy, CProstokat &P);
};
#endif
Моя проблема, когда он начинает компилироваться и находит эту строку: friend bool operator>(COkrag o1, CProstokat o2);
Там написано: Error 1 error C2061: syntax error : identifier 'CProstokat'
Понятия не имею, в чем причина. Похоже, он не знает объект CProstokat, но заголовочный файл с объявлением этого класса был включен.
Может кто-нибудь сказать мне, что не так?
EDIT:
Я исправил свой код, и вот что я получаю. Я не знаю, почему я не мог добавить const к bool operator>(CProstokat & p2);
Я хотел, чтобы это выглядело так:
bool operator>(CProstokat & p2);
но компилятор говорит
Error 3 error C2662: 'CProstokat::PodajPole' : cannot convert 'this' pointer from 'const CProstokat' to 'CProstokat &'
Теперь это работает без него. Вот что я получаю.
#ifndef __OKRAG_H__
#define __OKRAG_H__
#include "figura.h"
class CProstokat;
class COkrag: public CFigura
{
protected:
int m_iR;
public:
COkrag();
COkrag(int x, int y, int r);
~COkrag();
void ZmienR(int r);
float PodajObwod();
float PodajPole();
int PodajR();
void operator+(int r);
friend void operator+(COkrag o, int x[2]);
bool operator>(const CProstokat & p2); //I have changed it because now I can use 'this->'
bool operator<(CProstokat & p2);
bool operator>=(CProstokat & p2);
bool operator<=(CProstokat & p2);
bool operator>(COkrag o2);
bool operator<(COkrag o2);
bool operator>=(COkrag o2);
bool operator<=(COkrag o2);
friend ostream& operator << (ostream &wy, COkrag &O);
};
#endif
#ifndef __PROSTOKAT_H__
#define __PROSTOKAT_H__
#include "figura.h"
class COkrag;
class CProstokat: public CFigura
{
protected:
int m_iSz, m_iWy;
public:
CProstokat();
CProstokat(int x, int y, int szer, int wys);
~CProstokat();
void ZmienSz(int x);
void ZmienWy(int y);
float PodajObwod();
float PodajPole();
void operator+(int a);
friend void operator+(CProstokat p, int x[2]);
bool operator>(COkrag& o2);
bool operator<(COkrag& o2);
bool operator>=(COkrag& o2);
bool operator<=(COkrag& o2);
bool operator>(CProstokat p2);
bool operator<(CProstokat p2);
bool operator>=(CProstokat p2);
bool operator<=(CProstokat p2);
friend ostream& operator << (ostream &wy, CProstokat &P);
};
#endif
Надеюсь, я правильно понимаю Ваш совет. Спасибо всем за потраченное время на ответы.