オペレータに問題があります。一般的に私はオペレータを使う基本を知っています。しかし、私の問題は2つのオブジェクトを比較したいときに始まります。私は2つの異なるクラス宣言ファイルokrag.hとprostokat.hを持っています。私は別のクラスから2つのオブジェクトを比較します:friend bool operator>(COkrag o1, CProstokat o2);
2つの異なるクラスのcompare演算子を使用する
それは言う:Error 1 error C2061: syntax error : identifier 'CProstokat'
私は考えどのような理由を持っていない、それはコンパイルを開始し、このラインを見つけたときに
//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
私の問題がありますです。オブジェクトCProstokatを知らないようですが、このクラスの宣言を含むヘッダーファイルが含まれています。
何が問題なのか教えていただけますか?
編集: 私は自分のコードを修正しました。ここに私が得たものがあります。
bool operator>(CProstokat & p2);
をコンパイラは
Error 3 error C2662: 'CProstokat::PodajPole' : cannot convert 'this' pointer from 'const CProstokat' to 'CProstokat &'
今ではそれなしで動作言う:私は、私はそれが次のようになりたかったbool operator>(CProstokat & p2);
へのconstを追加することができなかった理由を私は知りません。ここに私が得るものがある。
#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のキーワードフレーズは「*前方宣言*」です。 –
また、一般的な規則は、母国語ではなく英語の識別子を使用することです。 Similaryでは、クラス名の先頭にある "C"はほとんどの時間を刺激し、コードに明瞭さをもたらしません(すべてのIDEは 'Circle'がクラスであるかどうか、「CCircle」は不要です読むことがさらに困難になります)。 – Griwes
それは私の宿題であり、教師はこのタイプのCクラス宣言を必要とします。しかしアドバイスをいただきありがとうございます私は自分のプライベートプロジェクトにあなたの推奨表記スタイルを使用します。 –