我已经发布了另一个关于结构与类的问题。我相信我得到了很好的反馈,因此我重新开始编写代码。
这就是让我感到困惑的(也许是幼稚的;))
我需要有一个称为cPoint的类(或struct并不介意),它仅使用X,Y坐标定义空间中的Point。
从中得出所有形状类别。因此,对于cRectangle(即矩形的类),cPoint将用作基础元素。
要实例化一个Rectangle,调用者必须提供2个点的坐标,分别是矩形的UpperLeft和LoowerRight角。
我想要cRectangle构造函数要做的是实例化这两个点,因为它拥有私有点并使用它们定义矩形,进行计算等。这两个点在公共范围内不可见,因此调用者不能直接更改它们。
这是我尝试做的一个例子(显然是错误的):
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);
}
您想在
operator(int,int)
类的实例上调用cPoint
,但尚未提供此运算符的定义。关于c++ - C++与范围和声明混淆,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21502107/