Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果参数是由另一个函数生成的,如何调用该函数?_C++_Function_Arduino_Fastled - Fatal编程技术网

C++ 如果参数是由另一个函数生成的,如何调用该函数?

C++ 如果参数是由另一个函数生成的,如何调用该函数?,c++,function,arduino,fastled,C++,Function,Arduino,Fastled,我使用Arduino和FastLED库控制一条LED,我设置了一些功能,可以改变LED的颜色等等 我有一个函数,其中传递红色、绿色和蓝色的值,并将整个条带设置为该颜色: void changeColour(int valR、int valG、int valB){ 对于(int i=0;i > > p>不能从C++函数中返回多个值(那么容易)。实际上,randomColor函数只返回一个值,valB,因为它是表达式(valR,valG,valB)中的最后一个值 一种简单的方法是让randomCo

我使用Arduino和FastLED库控制一条LED,我设置了一些功能,可以改变LED的颜色等等

我有一个函数,其中传递红色、绿色和蓝色的值,并将整个条带设置为该颜色:

void changeColour(int valR、int valG、int valB){
对于(int i=0;i
然后,我设置了一个预设颜色的二维数组及其相应的RGB值:

int colors[20][3]={
{255,105,180},//HotPink
{255,20147},//DeepPink
{139,0,0},//DarkRed
{255,0,0},//红色
{255,69,0},//橙色
{255,255,0},//黄色
{128,0,0},//栗色
{50205,50},//LimeGreen
{0,255,0},//石灰
{34,139,32},//ForestGreen
{0,128,0},//绿色
{0,100,0},//暗绿色
{102205170},//MediumAquaMarine
{0,255,255},//Aqua
{0,139,139},//DarkCyan
{0191255},//深蓝
{0,0,255},//蓝色
{128,0,128}//紫色
};
我想做的是调用
changeColour()函数并从数组中传入随机颜色的RGB值,因此我编写了该函数:

int randomColor();{
int x=rand()%18;
int valR=颜色[x][0];
int valG=颜色[x][1];
int valB=颜色[x][2];
返回(valR、valG、valB);
}

如何获取它,以便调用
changeColour()
函数,而不是
changeColour(valR,valG,valB)
它调用
randomColor()
函数,该函数反过来返回
valR,valG
valB
值,从而将它们传递到
changeColour()中< /p> >  > p>不能从C++函数中返回多个值(那么容易)。实际上,
randomColor
函数只返回一个值,
valB
,因为它是表达式
(valR,valG,valB)
中的最后一个值


一种简单的方法是让
randomColor
将指针返回到
colors
数组中,然后重载或更改
changeColour
以接受
int
数组。因此,不要在该函数内部使用
valR
valG
valB
,而是使用
colorReference[0]
colorReference[1]
,等等。

您的第一个问题是
randomColor
返回一个
int
,而不是一个

(valR,valG,valB)
使用逗号运算符,按顺序计算所有操作数(在本例中为nop),整个表达式计算为最后一个操作数,即返回的
valbB

最简单也是最合适的方法是为RGB颜色创建一个结构:

struct Rgb
{
    int r;
    int g;
    int b;
};

void changeColour(Rgb color) {
  for (int i = 0; i < NUM_LEDS; i++) {
        led[i] = CRGB(color.r, color.g, color.b);
      }
      FastLED.setBrightness(255);
      FastLED.show(); 
}

Rgb colours [20] = { /* ... */ };

Rgb randomColour() {
    int x = rand() % 18;
    return colours[x];
}


<>我也必须指出ARDUIO-LIB有它自己的随机函数:我建议你考虑它。

< P> C++ 11和更多的元组可以使用,但是你还有其他的选择。 1:您可以返回包含RGB值的结构,然后从randomColor()返回它

2:更改randomColor()以接受输出参数。。参考资料

void randomColor(int &r, int &g, int &b) {
    int x = rand() % 18;
    r = colours[x][0];
    g = colours[x][1];
    b = colours[x][2];
}

void changeColor() {
   int r, g, b;
   randomColor(r, g, b);
   std::cout << r << " " << g << "  " << b << std::endl;
}
void随机颜色(int&r、int&g、int&b){
int x=rand()%18;
r=颜色[x][0];
g=颜色[x][1];
b=颜色[x][2];
}
void changeColor(){
int r,g,b;
随机颜色(r、g、b);

std::cout首先:
randomColor
不会返回您认为返回的内容教授,我需要进一步澄清一下。如果没有特殊的结构和语法,您无法从函数返回多个值,对吗?例如元组对象之类?啊,我明白了。谢谢!谢谢,我想我可以看到这里发生了什么。我将其设置为y你有,但当我运行程序时,它会给出错误“变量或字段'ChangeColor'声明无效”?还值得注意的是,
changeColour
函数的思想是,当调用该函数时,输入要么是实际的RGB值,要么有一个随机选择它们的函数-不确定这是否真的可能变量或字段“changeColour”声明无效-请仔细检查键入错误。如果您在该函数的
Rgb
参数中输入错误。
void randomColor(int &r, int &g, int &b) {
    int x = rand() % 18;
    r = colours[x][0];
    g = colours[x][1];
    b = colours[x][2];
}

void changeColor() {
   int r, g, b;
   randomColor(r, g, b);
   std::cout << r << " " << g << "  " << b << std::endl;
}
unsigned int randomColor() {
    unsigned int r = 11;
    unsigned int g = 22;
    unsigned int b = 33;
    return r << 16 | g << 8 | b;
}

void change_color() {
    unsigned int rgb = randomColor();
    unsigned int b = rgb & 0xFF;
    unsigned int g = (rgb >> 8) & 0xFF;
    unsigned int r = (rgb >> 16) & 0xFF;
}