我们已经创建了一个如下定义的结构hsv。
struct hsvoutput {
float hue; // angle in degrees
float saturation;
float value;
};
和
struct hsvoutput hsv[img->x * img->y];
从图像尺寸中拉出尺寸。
int RGBtoH(int r, int g, int b, struct hsvoutput hsv, int i)
{
float h;
float s;
float v;
RGBtoHSV(r, g, b, &h, &s, &v);
hsv.hue[i]= h;
hsv.saturation[i] = s;
hsv.value[i]= v;
return h;
}
我们想要一种方法来获取RGBtoH函数,将hsv结构的第i个值设置为h,s和v值。此i值是来自调用此RGBtoH函数的循环的迭代值。
但是,如上所述尝试时会发生此错误。
错误:下标值既不是数组也不是指针,也不是向量
答案 0 :(得分:4)
在您的结构定义中,
struct hsvoutput {
float hue; // angle in degrees
float saturation;
float value;
};
hue
,saturation
和value
不属于数组类型。你不能对它们使用索引。
所以,稍后,写
hsv.hue[i]= h;
hsv.saturation[i] = s;
hsv.value[i]= v;
是错的。它们都是单个变量,使用索引对它们无效。
解决方案:如果您希望将数组 hsv
传递给您的函数,并更新所有元素的字段值,您应该执行类似的操作(伪代码)
int RGBtoH(int r, int g, int b, struct hsvoutput *hsv, int i)
{ //change hsv type to pointer
float h;
float s;
float v;
RGBtoHSV(r, g, b, &h, &s, &v);
hsv[i].hue= h; //use indexing on hsv
hsv[i].saturation = s; //use indexing on hsv
hsv[i].value= v; //use indexing on hsv
return h;
}
答案 1 :(得分:1)
应该是:
hsv[i].hue = h;
...
和
int RGBtoH(int r, int g, int b, struct hsvoutput *hsv, int i)
你的情况下的数组是hsv,所以应该像这样索引。然后,您可以将指针传递给函数中的hsvoutput。
答案 2 :(得分:1)
您正在尝试将结构属性索引为数组,但是对于每个结构,它们只是单个实例,因此您不能像数组一样索引它们。您应该分配一个结构数组,然后将指针传递给该数组,这样您就可以访问该数组的第i个元素。请参阅下面的代码。
int RGBtoH(int r, int g, int b, struct hsvoutput *hsv, int i)
{
float h;
float s;
float v;
RGBtoHSV(r, g, b, &h, &s, &v);
hsv[i].hue= h;
hsv[i].saturation = s;
hsv[i].value= v;
return h;
}
答案 3 :(得分:0)
由于hsv是数组,您应该将参数更改为指针类型,然后对指针进行索引而不是浮点数。像这样:
exec('bash -c /path/to/script.sh ' . $i .' ' .date('d').' '.date('m') . ' > /dev/null 2>&1 &"');