簡體   English   中英

在C ++中存儲對數組的引用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM