我對運算符有問題。通常我知道使用操作符的基本知識。但是當我想比較兩個對象時,我的問題就開始了。我有兩個不同的類聲明文件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,但包含此類聲明的頭文件。
誰能告訴我什麼是錯的?
編輯: 我已經改正了我的代碼,這裏是我所得到的。我不知道爲什麼我不能加一個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
我希望我能正確理解您的建議。感謝大家花時間回答問題。
Google關鍵字短語是「* forward declaration *」。 – 2012-04-01 16:39:40
此外,通用慣例是使用英文標識符,而不是使用您的母語。類似地,類名開頭的「C」大部分時間都令人惱火,並且不會爲您的代碼帶來任何清晰度(每個IDE都可以告訴您「Circle」是類還是其他任何內容,不需要「CCircle」 - 哪個使其更難以閱讀)。 – Griwes 2012-04-01 16:42:56
這是我的作業任務,老師需要這種類型的CClass聲明。但是,謝謝你的建議,我會用你的建議符號風格到我的私人項目。 – 2012-04-01 16:49:27