gpt4 book ai didi

C++ 混淆了作用域和声明

转载 作者:行者123 更新时间:2023-11-28 02:58:18 25 4
gpt4 key购买 nike

我已经发布了另一个关于结构与类的问题。我相信我得到了很好的反馈,所以我回去处理我的代码。这是让我感到困惑的地方(也许是幼稚的;))

我需要有一个名为 cPoint 的类(或者 struct 并不介意),它只是在空间中用 X、Y 坐标定义一个点。 所有形状类都将从中派生。因此对于 cRectangle,这是一个矩形类,cPoint 将用作基本元素。要实例化一个矩形,调用者必须提供 2 个点的坐标,分别是矩形的 UpperLeft 和 LoowerRight 角。我希望 cRectangle 构造函数做的是实例化这两个点,因为它拥有私有(private)点 并使用它们来定义矩形、进行计算等。这两个点不应该对公共(public)范围可见,因此调用者不能直接更改它们。这是我尝试做的一个例子(显然是错误的):

class cPoint
{
public:
int X,Y;
cPoint();
cPoint(int x, int y)
{
X=x;
Y=y;
}
};

class cRectangle
{
friend class cPoint;
public:
Rectangle(int x1,int y1,int x2,int y2) //the constructor of cRectangle
{
ul(x1,y1);
dr(x2,y2);
}
unsigned int area()
{
return((dr.X-ul.X) * (dr.Y-ul.Y));//example function that uses ul,dr
}
private:
cPoint ul; //uP lEFT point
cPoint dr; //dOWN Right point
};

我得到的错误是“错误 1 ​​与调用‘(cPoint) (int&, int&)’不匹配”

谢谢

最佳答案

/* use initilization list */
Rectangle(int x1,int y1,int x2,int y2) : ul(x1,y1), dr(x2,y2)
{
}

你的代码不会编译,因为这里

Rectangle(int x1,int y1,int x2,int y2)    //the constructor of cRectangle
{
ul(x1,y1);
dr(x2,y2);
}

您想在 cPoint 类的实例上调用 operator(int,int),但尚未提供此运算符的定义。

关于C++ 混淆了作用域和声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21502107/

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