尝试更改浮点值时出错?

时间:2016-04-30 02:50:34

标签: c++

我对C ++很新,遇到了问题。我试图改变某个浮点值,用于定义一个元素的RGBA。问题是当我尝试更改浮动的值时发生错误。这是一个例子:

float ColorForScrollbar[4] = {1,0,0,.8};
// Set the value for ColorForScrollbar


// Attempt to change #1:
ColorForScrollbar[4] = {0,1,0,.8};
// Trying to change value of ColorForScrollbar, this doesn't
// work though, it returns an error saying:
// "Error: Expected an expression"


// Attempt to change #2:
ColorForScrollbar = {0,1,0,.8};
// This also doesn't work, it returns the error:
// "Error: Expression must be a modifiable value"

任何帮助都没有"尝试改变#1"也没有"尝试改变#2"工作

2 个答案:

答案 0 :(得分:2)

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::vectorstd::array)可能取决于你正在做什么。

答案 1 :(得分:-1)

数组实际上只是一个连续的,固定的内存区域的地址。您不能更改它,只能更改自己的街道地址(当然,除非您移动)。

然而,你可以改变的是数组的内容:

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];