我有以下使用Aaron Liddiment的LED libraries的代码(为简单起见,将其简化):

#include <FastLED.h>
#include <LEDMatrix.h>
#include <LEDSprites.h>
#include <LEDText.h>

cLEDMatrix<16, 16, HORIZONTAL_ZIGZAG_MATRIX> leds;

class Class2{

  public:
    Class2(){
      init();
    };

    void init(){
      cLEDSprites Sprites(&leds);
    }

    bool loop(){
      Sprites.UpdateSprites();
      return true;
    }
};


如图所示,我需要在Sprites中引用Class2::loop()对象,但是我被告知'Sprites' was not declared in this scope(这很有意义)。如果我将此行移到init函数之外,如下所示:

class Class2{
  cLEDSprites Sprites(&leds);

  public:
    Class2(){};

    bool loop(){
      Sprites.UpdateSprites();
    }
};


然后,我得到error: expected identifier before '&' token

如果Spritesint,我将在Class2中声明一个私有属性,将该值通过构造函数传递到类中,然后将其复制到init函数中。我不知道该怎么用cLEDSprites类型的东西。如您所知,我对所有这些东西都是新手,所以请对我的无知保持温柔!

最佳答案

使用成员初始化程序列表语法,您的代码可能如下所示:

#include <FastLED.h>
#include <LEDMatrix.h>
#include <LEDSprites.h>
#include <LEDText.h>

cLEDMatrix<16, 16, HORIZONTAL_ZIGZAG_MATRIX> leds;

class Class2{

  public:
    Class2():
            Sprites(&leds);
    {
    }

    bool loop(){
      Sprites.UpdateSprites();
      return true;
    }

  private:
    cLEDSprites Sprites;
};


成员初始化器列表可用于初始化任何类成员,尤其是那些无法默认初始化的类成员(例如const成员或没有默认构造函数的类)。
在这里初始化所有内容是一个好主意-有些人甚至会说好的构造函数的主体永远都没有任何行。

当然,最好不要使用全局变量,而只需将指向矩阵的指针传递给Class2构造函数,但是我相信,如果您决定不使用全局变量,您将能够自己做到这一点。

10-07 22:16