我有以下使用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
。如果
Sprites
是int
,我将在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
构造函数,但是我相信,如果您决定不使用全局变量,您将能够自己做到这一点。