引用传递的参数就像复制一样。

问题描述 投票:1回答:1

我有两个指针叫 Character *current = nullptr;Character *target = nullptr;.

我是通过一个函数来改变它们。

void Position::Current(const Vector2f & mouse_position, Character *& current)
{
    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))
            {
                current = &positioning[i][j];

                cout << "Selected: " << current->name << endl;
                cout << endl;

                current->health -= 5; //it doesn't change anything
                break;
            }
        }
    }
}

Target() 函数也是用同样的方法实现的.

这两个函数都选择了正确的字符,但看起来这些都是原始对象的副本(我不能改变字符的统计)。

Character positioning[4][5] 是一个充满字符的数组。我可以通过函数将它们添加到特定的位置上。

void Position::Add(Character & character, int x, int y)
{
    if ((x >= 0 && x < 4) && (y >= 0 && y < 5))
    {
        positioning[x][y] = character; //is this a problem ?

        Character::position[x][y] =  true;
        character.x = x;
        character.y = y;
    }
}

Position 类中只有一个对象。

我可以通过函数将它们添加到特定的位置上:类只有一个对象,在 main() 它看起来像这样。

positionx.Add(knight, 3, 4); positionx.Add(demon, 2, 4); 然后:

if ((event.type == Event::MouseButtonPressed) && (event.mouseButton.button == Mouse::Right))
{
    Vector2i pos = Mouse::getPosition(window);
    Vector2f position = (Vector2f)pos;

    positionx.Current(position, current);
}

当前的功能应该从选定的角色身上拿走5个健康值,但没有发生任何事情。

我哪里做错了?

谢谢你的回答。

c++ function pointers reference copy
1个回答
0
投票

问题解决了!

我只需要让 Character positioning[4][5] -> Character *positioning[4][5]

然后在点击某个字符后,终于开始表现得像一个原始对象。

© www.soinside.com 2019 - 2024. All rights reserved.