我刚刚开始学习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();
}
如果这浪费了你的时间,请提前抱歉。
答案 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 ));
如果您打算使用它,则需要一个默认构造函数。