Параметр, переданный ссылкой, ведет себя как копия - PullRequest
1 голос
/ 01 мая 2020

У меня есть два указателя, называемые 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] - массив, заполненный символами. Я могу добавить их в определенные c позиции по функциям:

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 единиц здоровья у выбранного персонажа, но ничего подобного не происходит.

Где я допустил ошибку?

Спасибо за любой ответ.

1 Ответ

0 голосов
/ 01 мая 2020

Проблема решена!

Мне просто нужно было сделать Character positioning[4][5] -> Character *positioning[4][5]

Затем, после нажатия на определенный символ, он наконец начал вести себя как оригинальный объект.

...