尝试更改浮点值时出错
Error when attempting to change value of float?
本文关键字:出错 更新时间:2023-10-16
试图更改用于定义元素的RGBA的某个浮点值。问题是,当我试图更改浮点值时,会发生错误。这里有一个例子:
float ColorForScrollbar[4] = {1,0,0,.8};
// Set the value for ColorForScrollbar
ColorForScrollbar[4] = {0,1,0,.8};
// "Error: Expected an expression"
ColorForScrollbar = {0,1,0,.8};
// "Error: Expression must be a modifiable value"
float ColorForScrollbar[4] = {1,0,0,.8};
这是有效的。{1,0,0,.8}
是初始值设定项。然而,这并不是一种表达。它只能在对象声明中的=
之后使用。
ColorForScrollbar[4] = {0,1,0,.8};
如果这是合法的,那么它将(尝试)更改ColorForScrollbar[4]
的值,而不是整个数组的值。由于存在的唯一元素具有索引0、1、2和3,因此这将具有未定义的行为。但是,{0,1,0,.8}
不是一个表达式,因此它不能用于赋值的RHS。
这更接近了,但它和以前有同样的问题。此外,数组类型没有赋值运算符。
您可以一次更改一个元素:
ColorForScrollbar[0] = 0;
ColorForScrollbar[1] = 1;
ColorForScrollbar[2] = 0;
ColorForScrollbar[3] = 0.8;
或者,如果你想使用初始化器语法,你可以使用一个临时对象:
#include <cstring>
const float new_value[4] = { 0, 1, 0, 0.8 };
std::memcpy((void*)ColorForScrollbar, (void*)new_value), sizeof ColorForScrollbar);
然而,这一切都相当低级。您最好使用标准库中的一个C++容器类。哪一个最好(std::vector
,std::array
)可能取决于你在做什么。
数组实际上只是一个连续的、固定的内存区域的地址。你不能改变它,就像你可以改变自己的街道地址一样(当然,除非你搬家)。
不过,您可以更改的是数组的内容:
ColorForScrollbar[0]=0;
ColorForScrollbar[1]=1;
ColorForScrollbar[2]=0;
ColorForScrollbar[3]=.8;
您不必更改数组中的每个值,只需更改需要更改的值即可。
你也可以做一个显式复制:
float NewColorForScrollBar[4] = {0,1,0,.8};
for (i=0; i<4; ++i)
ColorForScrollbar[i]=NewColorForScrollbar[i];
相关文章:
- 访问者访问变体并返回不同类型时出错
- 在Linux for Windows上编译C++代码时出错
- 读取文件的最后一行并输入到链接列表时出错
- 重载操作程序时出错>>用于类中的字符串 memebr
- 调用专用模板时出错"no matching function for call to [...]"
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- LINK 尝试使用 OpenSSL evp aes 256 c++ 时出错
- 在Google Kick start中提交时出错
- 在c++中访问int到类对象的映射时出错
- 分段错误当我试图运行程序时出错
- 使用dynamic_cast和构造函数时出错
- CHECK(调用)函数在Google Colab中出错
- 用pybind11包装C++抽象类时出错
- 为x86而非x64编译时出错
- 从R调用C++函数并对其进行集成时出错
- 这个函数哪里出错了
- C++ 创建包含链表和字符串的对象的链接列表时出错
- 为重写std::exception的库生成swig接口时出错
- 导入/导出变量时出错
- PrintWindow函数在notepad.exe中出错