我有一个数组:
const int neoPixelCount = 40;
CRGB neoPixels[neoPixelCount];
我有一个Dancer
,需要保留该数组的引用。它有init
方法,如下所示:
// .h
class Dancer {
public:
CRGB neoPixels[];
void init(CRGB neoPixels[]);
}
// .cpp
void Dancer::init(CRGB _neoPixels[]) {
neoPixels = _neoPixels;
}
但是当我调用它时,编译器不会让我将引用传递给数组。
dancer->init(neoPixels);
哪个收益率:
discobot / Dancer.cpp:在成员函数'void Dancer :: init(CRGB *)'中:
discobot / Dancer.cpp:14:错误:将'CRGB *'分配给'CRGB [0]'的不兼容类型
使这项工作成功的正确语法是什么?为什么?
答案 0 :(得分:2)
您只需要在类成员声明中将CRGB neoPixels[];
更改为CRGB* neoPixels;
,因为您希望存储指针(指向数组)而不是零/未知长度数组。
答案 1 :(得分:2)
如果你想要一个数组作为类成员的引用,你应该有类似的东西
class Dancer
{
public:
int (&neoPixels)[40]; // reference to an array of 40 elements
Dancer(int (&neoPixels)[40]) : neoPixels(neoPixels) { }
};
成员neoPixels
是对40个元素数组的引用(原谅对int
的更改,它是在我的机器中进行检查)。
现在,因为它是一个引用,所以它应该在构造函数的初始化列表中初始化。
为了概括上述想法,您的类可以是一个模板,其中包含对已知大小的编译时数组的引用。
template<size_t N>
class Dancer
{
public:
int (&neoPixels)[N]; // reference to an array of N elements
Dancer(int (&neoPixels)[N]) : neoPixels(neoPixels) { }
};
答案 2 :(得分:1)
我建议将Dancer
更改为:
class Dancer {
public:
CRGB* neoPixels;
void init(CRGB neoPixels[]);
}