gpt4 book ai didi

c++ - 对两个不同的类对象使用比较运算符

转载 作者:行者123 更新时间:2023-11-28 08:07:32 24 4
gpt4 key购买 nike

我对运营商有疑问。一般来说,我知道使用运算符的基础知识。但是当我想比较两个对象时,我的问题就开始了。我有 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,但包含了带有此类声明的头文件。

谁能告诉我哪里出了问题?

编辑:我已经更正了我的代码,这就是我得到的。我不知道为什么我不能将 const 添加到 bool operator>(CProstokat & p2); 我希望它看起来像这样:

bool 运算符>(CProstokat & p2);

但是编译器说

错误 3 错误 C2662:“CProstokat::PodajPole”:无法将“this”指针从“const CProstokat”转换为“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

希望我能正确理解您的建议。感谢大家花时间回答。

最佳答案

你在包含中有一个循环依赖。您将 prostokat.h 包含在 okrag.h 中,反之亦然。这样,其中一个包含将不起作用(由于 ifndef,您将得到空文件)。

要解决此问题,请在 okrag.h 的开头添加 CProstokat 类的前向声明:

class CProstokat;

此外,更改运算符的签名以通过 const 引用获取参数,而不是通过值获取参数。这将提高性能并促进使用前向声明。

关于c++ - 对两个不同的类对象使用比较运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9966153/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com