C ++ Проблема со ссылкой на bool из массива - PullRequest
0 голосов
/ 27 октября 2019

Я работаю над новым меню DirectX для игры, так как мое предыдущее меню сильно устарело и плохо кодировалось.

В настоящее время я делаю много вещей в массивах и циклах, но яУ меня одна проблема. Когда я загружаю массив с некоторыми логическими значениями, и я прохожу массив и передаю логические функции, он не будет работать.

При нажатии кнопки в меню логическое значение должно быть либовключено или отключено. Когда я пытаюсь сделать это напрямую без массива, это работает. Логическое значение включается и отключается, когда я этого хочу.

В настоящее время я не знаю, почему логическое значение не распознается, когда я просто добавляю его в цикл.

Код цикла:

    const char* ButtonArray[] = { "Button1", "Button2", "Button3" };
bool varsArray[] = { bool1, bool2, bool3};

int iWrapperHeight = (ARRAYSIZE(ButtonArray) + 1) * iItemHeight;
defWrapperHeight = iWrapperHeight;

Wrapper* wrapper1 = new Wrapper(0, iBodyX, iBodyY, iTabWidth, iWrapperHeight, "Wrapper");
wrapper1->Draw();

CreateOption* option = new CreateOption(0, iBodyX, iBodyY += (iItemHeight * 0.5), iW, iH);
for (int i = 0; i < ARRAYSIZE(ButtonArray); i++) {
    option->ToggleButton(iItemHeight, ButtonArray[i], varsArray[i]);
}

Здесь я рисую обертку, кнопки рисования и т. Д. *

Теперь, если бы я изменил

option->ToggleButton(iItemHeight, ButtonArray[i], varsArray[i]);

на

option->ToggleButton(iItemHeight, ButtonArray[i], bool1);

Код работает. Это явно не то, что я хочу, так как 3 кнопки влияют на один и тот же логический. Моя функция ToggleButton выглядит следующим образом.

void ToggleButton(int iYAdder, const char* szTitle, bool& bVar)

, и если мышь находится в правильном месте и щелкнула мышь: bVar =! BVar

Так что, да, я искал, есливозможно я облажался с работой массива, не уверен. Любая помощь будет высоко оценена.

С уважением

1 Ответ

0 голосов
/ 27 октября 2019

Просто угадывание здесь, поскольку вы не показываете Минимальный воспроизводимый пример , поэтому мы не знаем, как вы проверяете или используете значения вмассив.

Вы определяете и инициализируете массив bool как

bool varsArray[] = { bool1, bool2, bool3};

Это означает, что вы копируете исходные значения от bool1 до bool3. И вы передаете эти новые значения в функцию ToggleButton, что означает, что ссылки в этой функции будут ссылками на элементы массива.

My думаю, в том, что вы не проверяетемассив, а точнее отдельные переменные от bool1 до bool3, которые, конечно, не изменятся, так как вы не передаете ссылки на эти переменные.

Либо вам нужно реорганизовать код для проверки значенийот varsArray[0] до varsArray[2], или создайте массив ссылок (точнее, поскольку невозможно создать массив ссылок напрямую, используя std::reference_wrapper, как создано std::ref).

...