无法使用成员函数更改私有变量

时间:2016-10-06 14:05:27

标签: c++ c++11

int width = ((Excel.Range)newWorkSheet.Cells[rowCount, 2]).Width;
((Excel.Range)newWorkSheet.Cells[rowCount, 2]).ColumnWidth = width + 10;

代码在上面。

所以我正在创建一个Point类。 Point有2个私有变量xCord,yCord。我想调用旋转功能,并且能够修改xCord,yCord,但它没有。我不知道为什么。我尝试将Point p1传递给函数并查看是否可以解决问题,但事实并非如此,我也尝试了不通过Point p1并且在函数定义中只有Point p1。

p1.setX(可变); 在main()中工作。但是当我在另一个成员函数中调用p1.setX(VARIABLE)时却没有。

3 个答案:

答案 0 :(得分:2)

您正在将p1的副本传递给rotate函数。仅修改此副本。

答案 1 :(得分:1)

您按值传递点数:

int rotate(int x, int y, Point p1);
                               ^^--------pass-by-value

即。函数内的p1p1main的副本,一旦函数返回就会被删除。如果要更改在函数内作为参数传递的点,请通过引用传递它:

int rotate(int x, int y, Point& p1);
                            ^^--------pass-by-reference

PS: ...但是,由于rotatePoint的成员函数,您可能宁愿轮换调用它的实例,更改其签名到

int rotate(int x, int y);

而不是更改作为参数传递的某个点的坐标,请执行以下操作:

 this->setX(tempX);  // this-> not really necessary, just added for clarity
 this->setY(tempY);

或者你保持原样并传递应该作为参数旋转的点,但是你应该考虑制作方法static

PPS :如果要将其更改为传递引用,则必须将类声明中的签名更改为:

int rotate(int x, int y, Point& p1);

以及您必须更改为的定义:

int Point::rotate(int tempX, int tempY, Point& p1) { /*...*/ }

答案 2 :(得分:-2)

void point::rotate() {
xcord = ycord;
ycord = xcord;
}

是基本轮换所需的全部内容