Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过引用将对象传递给函数不会更改此对象_C++_Function_Pointers_Reference - Fatal编程技术网

C++ 通过引用将对象传递给函数不会更改此对象

C++ 通过引用将对象传递给函数不会更改此对象,c++,function,pointers,reference,C++,Function,Pointers,Reference,所以基本上,我试图将一个对象传递给我的函数Attack(): 在函数onClick中,变量current通过值而非引用传递。我假设应该通过引用传递: void onClick(Vector2f mouse_position, Character &current, Character *target, Position &positionx) 请注意,参数current已更新为引用 编辑: 查看Attack函数的主体,如果满足打印名称的行,是否确定满足if条件语句if(oth

所以基本上,我试图将一个对象传递给我的函数
Attack()



在函数
onClick
中,变量
current
通过值而非引用传递。我假设应该通过引用传递:

void onClick(Vector2f mouse_position, Character &current, Character *target, Position &positionx)
请注意,参数
current
已更新为引用

编辑:


查看
Attack
函数的主体,如果满足打印名称的行,是否确定满足if条件语句
if(other.defensive>0)
if(Attack>other.defensive)
onClick()
函数最重要的部分是
target=&positionx.positioning[i][j]
。但是它是通过引用传递的,所以它不应该成为问题。

关于“目标”的问题不是吗?就我所见,“当前”修改了“目标”,或者至少应该修改它。SKCoder是对的。我想修改“*target”,而“current”是运行“Attack()”方法的对象。我将current更改为reference,但仍然不是working@Azam当我在onClick函数外使用Attack时,一切都很正常。为什么要手动调用析构函数
另一个。~Character()这个析构函数做什么?这可能会导致奇怪的行为,几乎没有理由手动调用析构函数。我想确保,如果角色的生命值下降到0,它将被销毁
void onClick(Vector2f mouse_position, Character current, Character *& target, Position &positionx)
{
    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            if ((mouse_position.x >= 245 + i * 164 && mouse_position.x <= 370 + i * 164) &&
                (mouse_position.y >= 56 + j * 201 && mouse_position.y <= 221 + j * 201))
            { // there's a 2d map with cards on those positions
                target = &positionx.positioning[i][j];
                current.Attack(*target);
            }
        }
    }

}
Character *current = new Character();
Character *target = NULL;
if ((event.type == Event::MouseButtonPressed) && (event.mouseButton.button == Mouse::Left))//SFML lib
{
    Vector2i pos = Mouse::getPosition(window);
    Vector2f position = (Vector2f)pos;
    onClick(position, *current, target, positionx);
} // target is selected after clicking on it
void onClick(Vector2f mouse_position, Character &current, Character *target, Position &positionx)