C++ 如何更改对象';s属性在另一个类中';C+中的函数+;?

C++ 如何更改对象';s属性在另一个类中';C+中的函数+;?,c++,C++,我有一个名为Object的类,它具有以下属性:xPos和yPos。它还具有这些属性的getter和setter。我有另一个叫做CollisionDetector的类,它有一个叫做detect的函数,它接收两个对象并检测它们是否发生了碰撞。如果有,则使用setXPos()和setYPos()函数将它们彼此推离。但是,它不会改变值,我正在试图找出原因 Object::Object(){ } Object::Object(float x, float y) { //constructor

我有一个名为Object的类,它具有以下属性:xPos和yPos。它还具有这些属性的getter和setter。我有另一个叫做CollisionDetector的类,它有一个叫做detect的函数,它接收两个对象并检测它们是否发生了碰撞。如果有,则使用setXPos()和setYPos()函数将它们彼此推离。但是,它不会改变值,我正在试图找出原因

Object::Object(){

}

Object::Object(float x, float y) {  //constructor
    xPos = x;
    yPos = y;
}

float Object::getXPos(){
    return xPos;
}

float Object::getYPos(){
    return yPos;
}

void Object::setXPos(float temp){
    xPos = temp;
}

void Object::setYPos(float temp){
    yPos = temp;
}

char Object::getType(){
return type;
}

bool CollisionDetector::detect(Object a, Object b){
    double size = 45; //Set size
    double xPosition = a.getXPos() - b.getXPos();
    double yPosition = a.getYPos() - b.getYPos();
    double sumRadius = (size/2 + 1) + (size/2 + 1);
    double radiusSquared = sumRadius * sumRadius;
    double distanceSquared = (xPosition * xPosition) + (yPosition * yPosition); //square the distances

    if (distanceSquared <= radiusSquared)
    {
        //Check for collisions between tanks
        if(a.getType() == 't' && b.getType() == 't'){
            if(a.getXPos() > b.getXPos()){
                a.setXPos(a.getXPos() + 10);
            }
            else if(a.getXPos() < b.getXPos()){
                a.setXPos(a.getXPos() - 10);
            }
            //Same for y direction
            if(a.getYPos() > b.getYPos()){
                a.setYPos(a.getYPos() + 10);
            }
            else if(a.getYPos() < b.getYPos()){
                a.setYPos(a.getYPos() - 10);
            }
        }
        return true;
    }
    return false;
Object::Object(){
}
对象::对象(浮点x,浮点y){//构造函数
xPos=x;
yPos=y;
}
浮点对象::getXPos(){
返回XPO;
}
浮点对象::getYPos(){
返回YPO;
}
void对象::setXPos(浮点温度){
xPos=温度;
}
void对象::setYPos(浮点温度){
yPos=温度;
}
char对象::getType(){
返回类型;
}
布尔碰撞检测器::检测(对象a、对象b){
双倍大小=45;//设置大小
双xPosition=a.getXPos()-b.getXPos();
double-yPosition=a.getYPos()-b.getYPos();
双槽半径=(尺寸/2+1)+(尺寸/2+1);
双半径方形=半径*半径;
双距离平方=(xPosition*xPosition)+(yPosition*yPosition);//将距离平方
if(距离平方b.getXPos()){
a、 setXPos(a.getXPos()+10);
}
else if(a.getXPos()b.getYPos()){
a、 setYPos(a.getYPos()+10);
}
else if(a.getYPos()
}

使用以下命令从main调用该函数:
碰撞检测器。检测(用户油箱、enemyTank)

我在上面的评论是对的-看看这个函数-
bool碰撞检测器::检测(对象a、对象b)

您正在将对象作为值传递,因此它们将被复制到elsewere,函数将对此副本进行操作。如果要更改原始对象,请通过指针或引用传递它们。
指针:
bool碰撞检测器::检测(对象*a,对象*b)

参考:
bool碰撞检测器::检测(对象a、对象b)

你必须给函数实际的对象作为参考,就像我在上面的例子中所做的那样

现在,您正在创建变量的副本,因此不需要修改原始变量

不同的可能选项是使用指向对象的指针,如:

bool CollisionDetector::detect(Object *a, Object *b)
只需结合
c++
搜索关键字
reference
pointer
,您就会找到大量关于它的文章和教程


解释一切都超出了范围。

(最小)请输入代码,否则人们将无能为力。发布一条。如果不可能,请发布相关代码。我们知道您正试图找出解决方案,但如果没有代码,我们无法解决问题。我猜-您可能会将对象作为值传递(听起来像是这样)。我说的对吗?然后使用第二个选项(参考)-只需像我一样更改函数原型。一切都会奏效的。@ AthoNoT1212:考虑接受一个你发现的答案,解决了你的问题,对你来说是可以理解的。答案左边的绿色小记号。所以其他人可以直接看到你发现的解决方案。
bool CollisionDetector::detect(Object *a, Object *b)