我已经发布了另一个关于结构与类的问题。我相信我得到了很好的反馈,因此我重新开始编写代码。
这就是让我感到困惑的(也许是幼稚的;))

我需要有一个称为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/

10-09 05:38