[英]Storing a reference to an array in C++
我有一個數組:
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]”的分配中的類型不兼容
使這項工作正確的語法魔術是什么,為什么?
您只需要更改CRGB neoPixels[];
至CRGB* neoPixels;
在類成員聲明中,因為您要存儲一個指向數組的指針,而不是零/未知長度的數組。
如果您希望將數組作為類成員進行引用,則應具有類似的內容
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) { }
};
我建議將Dancer
更改為:
class Dancer {
public:
CRGB* neoPixels;
void init(CRGB neoPixels[]);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.