课堂上的课程很难

时间:2014-01-18 23:42:24

标签: c++ class

我刚刚开始学习C ++,请原谅我一个非常无聊的问题 我不知道如何分解我的编译器告诉我的内容。我只是看不出自己的错误。

这是我的代码:

#include <iostream>
using namespace std;

class Point{
public:
    Point(int x, int y);    
    ~Point();
    int getX() const {return itsX;}
    int getY() const {return itsY;}
    void setX(int i) {itsX=i;}
    void setY(int i) {itsY=i;}
private:
    int itsX;
    int itsY;
};

Point::Point(int x, int y) {
    itsX = x;
    itsY = y;
}

Point::~Point() { // deconstructor - doesn't do anything
}

class Rectangle {
public:
    Rectangle(int w, int h, Point sP);
    ~Rectangle();

    void setUpperLeft(Point p)  {itsUpperLeft = p;}
    void setUpperRight(Point p) {itsUpperRight = p;}
    void setLowerLeft(Point p)  {itsLowerLeft = p;}
    void setLowerRight(Point p) {itsLowerRight = p;}

    void getPoints();

private:
    Point itsUpperLeft;
    Point itsUpperRight;
    Point itsLowerLeft;
    Point itsLowerRight;

    int itsWidth;
    int itsHeight;
};

Rectangle::~Rectangle() { // deconstructor - doesn't do anything
}

Rectangle::Rectangle(int w, int h, Point sP) {
    itsWidth = w;
    itsHeight = h;

    setUpperLeft( sP );
    setUpperRight(Point point( sP.getX() + itsWidth, sP.getY ));
    setLowerLeft( Point point( sP.getX(), sP.getY() + itsHeight) );
    setLowerRight( Point point( sP.getX() + itsWidth, sP.getY() + itsHeight ));
}


void Rectangle::getPoints() {
    cout << "Coordinates of upper left angle are:  "<< "x=" << itsUpperLeft.getX() << "\t y=" << itsUpperLeft.getY() << endl;
    cout << "Coordinates of upper right angle are:   "<< "x=" << itsUpperRight.getX() << "\t y=" << itsUpperRight.getY() << endl;
    cout << "Coordinates of lower left angle are:  "<< "x=" << itsLowerLeft.getX() << "\t y=" << itsLowerLeft.getY() << endl;
    cout << "Coordinates of lower right angle are:  "<< "x=" << itsLowerRight.getX() << "\t y=" << itsLowerRight.getY() << endl;

    cout << "----------------------------------------------------------";
}*/

int main() {
        Rectangle rect(100, 20, Point po(100, 200) );
        rect.getPoints();
}

如果这浪费了你的时间,请提前抱歉。

3 个答案:

答案 0 :(得分:0)

首先要注意的是你的Point类不能默认构造(它没有可以在没有任何参数的情况下调用的构造函数)。

第二件事是你在构造函数体中初始化Rectangles的点。您可能不知道的是,当到达构造函数体时,对象的所有成员都已初始化。如果要自定义这些成员的初始化方式,则需要在初始化列表中执行此操作。由于您没有这样做,编译器会尝试默认为您初始化这些成员...并且由于Point不能默认初始化,因此会出现编译错误。

固定矩形ctor:

Rectangle::Rectangle(int w,int h,Point sP)
: itsUpperLeft(sP), itsUpperRight(sP.getX() + w, sP.getY()),
  itsLowerLeft(sP.getX(),sP.getY()+ h), itsLowerRight(sP.getX() +w, sP.getY() + h),
  itsWidth(w), itsHeight(h)
  {}

修正了主要内容:

int main(){
  Rectangle rect(100,20, Point(100,200) );
  rect.getPoints();
}

答案 1 :(得分:0)

setUpperRight(Point point( sP.getX()+itsWidth, sP.getY ));错了。您想将临时创建的Point传递给函数吗?然后编写setUpperRight(Point( sP.getX()+itsWidth, sP.getY ));,这意味着只有一个显式构造函数调用而不带变量名。

答案 2 :(得分:0)

当您拨打以下内容时:

setUpperRight(Point point( sP.getX()+itsWidth, sP.getY ));

您没有为您传递的临时变量声明名称,只需说Point即可。像这样:

setUpperRight(Point( sP.getX()+itsWidth, sP.getY ));

如果您打算使用它,则需要一个默认构造函数。