解决:
我的错误是使用dot
而不是=
如此改变:
myRect.Rect(pt1,pt2,pt3,pt4); <-- didn't work
myRect = Rect(pt1,pt2,pt3,pt4); <-- worked
(感谢您的快速帮助!即使是为这个问题获得-1)
初始问题:
我尽量让问题变得简单。我不知道为什么这不起作用。如何更改已创建rect
的点数?我的猜测是我使用'this ->
运算符'无法正常工作。
我甚至不知道如何正确地标题我的问题,任何提示更好的标签?
class Point
{
private:
public:
int X;
int Y;
};
Point::Point() {
X = 0;
Y = 0;
}
class Rect
{
private:
Point P1, P2, P3, P4;
public:
Rect();
Rect(Point p1, Point p2, Point p3, Point p4);
};
Rect::Rect(Point p1, Point p2, Point p3, Point p4) {
this -> P1 = p1;
this -> P2 = p2;
this -> P3 = p3;
this -> P4 = p4;
}
int main(){
Rect myRect;
Point pt1;
Point pt2;
Point pt3;
Point pt4;
myRect.Rect(pt1,pt2,pt3,pt4);
}
无效使用
'Rect::Rect'
答案 0 :(得分:2)
您误解了方法的构造函数。看看这个问题的答案(关于Java,但类似的想法适用):https://stackoverflow.com/a/25803084/4816518。
总而言之,构造函数(包括默认构造函数)用于初始化对象,不返回任何内容(如果您不包含正在创建的对象),则命名与对象相同(例如(?:^|[^a-zA-Z])InitializationEvent(?:[^a-zA-Z]|$)
是Rect::Rect
类的构造函数
另一方面,方法用于在已创建的对象上调用某些行为。此外,与构造函数不同,它们可以具有返回类型。
所以,而不是这个
Rect
您可能想要更多内容:
Rect myRect;
Point pt1;
Point pt2;
Point pt3;
Point pt4;
myRect.Rect(pt1,pt2,pt3,pt4);
或者这个:
Point pt1 = Point(0,0); //Didn't see this constructor, but you probably need it.
Point pt2 = Point(1,1); //I'm choosing random values.
Point pt3 = Point(0,1);
Point pt4 = Point(1,0);
myRect = Rect(pt1,pt2,pt3,pt4); //this creates the Rect with the given points.
甚至这个更简化的版本(但是,你需要声明一个Point pt1(0,0);
Point pt2(1,1);
Point pt3(0,1);
Point pt4(1,0);
Rect myRect(pt1,pt2,pt3,pt4);
构造函数,而Point::Point(int x, iny y)
的构造函数需要获取Rect
个参数)。
const Point&
构造函数(在您的情况下为Rect myRect(Point(0,0),Point(1,1),Point(0,1),Point(1,0));
和Point::Point()
)创建对象,然后可以在其上执行方法。
Rect::Rect(Point p1, Point p2, Point p3, Point p4)
声明一个变量并使用默认构造函数实例化它。如果要将参数传递给对象,则需要使用Rect myRect
之类的参数调用构造函数。
答案 1 :(得分:1)
有两个错误。
1。
你需要为Point
声明一个默认构造函数,以便创建你在类之外定义的构造函数。
class Point
{
private:
public:
Point(); // <-- add this
int X;
int Y;
};
2。
您不需要使用类访问点运算符来使用Rect()
。这是因为Rect()
是构造函数,并且不需要像对函数那样在对象上调用构造函数。
Rect myRect;
myRect = Rect(pt1,pt2,pt3,pt4);
或者
Rect myRect = Rect(pt1,pt2,pt3,pt4);
或
Rect myRect(pt1,pt2,pt3,pt4);
答案 2 :(得分:1)
您首先使用默认构造函数(myRect
)构造Rect::Rect()
,然后尝试将其他构造函数作为成员函数调用。 (这是无效使用)
相反,请直接使用其他构造函数:Rect myRect(p1, p2, p3, p4)
关于this->P1
,您不需要使用this
来访问成员变量。
对于构造函数,使用初始化列表作为
Rect(Point p1, Point p2, Point p3, Point p4) :P1{p1},P2{p2},P3{p3},P4{p4} {}
优先在构造函数体中进行赋值,原因相同:如果不初始化成员,则在进入构造函数体之前将默认构造它们。