从数组引用布尔值的 C++ 问题
C++ Problem with referencing a bool from an Array
我正在为一款游戏制作一个新的 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
所以,是的,我一直在四处寻找我是否搞砸了阵列的工作,不确定。
任何帮助将不胜感激。
此致
这里只是 猜测 因为你没有显示 Minimal, Reproducible Example 所以我们不知道你如何检查或使用数组中的值。
您将 bool
数组定义并初始化为
bool varsArray[] = { bool1, bool2, bool3};
这意味着您 复制 从 bool1
到 bool3
的原始值。然后将这些新值传递给 ToggleButton
函数,这意味着该函数中的引用将是对数组元素的引用。
我的 猜测 是你不检查数组,而是检查不同的变量 bool1
到 bool3
,这当然不会更改,因为您不传递对这些变量的引用。
您需要重构代码以检查 varsArray[0]
到 varsArray[2]
的值,或者创建引用数组(或者更确切地说,因为无法直接创建引用数组, 使用 std::reference_wrapper
as created by std::ref
).
我正在为一款游戏制作一个新的 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
所以,是的,我一直在四处寻找我是否搞砸了阵列的工作,不确定。 任何帮助将不胜感激。
此致
这里只是 猜测 因为你没有显示 Minimal, Reproducible Example 所以我们不知道你如何检查或使用数组中的值。
您将 bool
数组定义并初始化为
bool varsArray[] = { bool1, bool2, bool3};
这意味着您 复制 从 bool1
到 bool3
的原始值。然后将这些新值传递给 ToggleButton
函数,这意味着该函数中的引用将是对数组元素的引用。
我的 猜测 是你不检查数组,而是检查不同的变量 bool1
到 bool3
,这当然不会更改,因为您不传递对这些变量的引用。
您需要重构代码以检查 varsArray[0]
到 varsArray[2]
的值,或者创建引用数组(或者更确切地说,因为无法直接创建引用数组, 使用 std::reference_wrapper
as created by std::ref
).