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)时却没有。
答案 0 :(得分:2)
您正在将p1
的副本传递给rotate
函数。仅修改此副本。
答案 1 :(得分:1)
您按值传递点数:
int rotate(int x, int y, Point p1);
^^--------pass-by-value
即。函数内的p1
是p1
中main
的副本,一旦函数返回就会被删除。如果要更改在函数内作为参数传递的点,请通过引用传递它:
int rotate(int x, int y, Point& p1);
^^--------pass-by-reference
PS: ...但是,由于rotate
是Point
的成员函数,您可能宁愿轮换调用它的实例,更改其签名到
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;
}
是基本轮换所需的全部内容