2016-12-07 4 views
0

私はオブジェクトを含むいくつかのプライベートメンバとそれらのメンバオブジェクトのいくつかへのポインタでいっぱいになるポインタの動的配列を持つクラスを持っています。ポインタの動的配列へのメンバオブジェクトへのポインタの追加

class NextionTest : public NextionDisplay { 
private: 
    NexText   lblText = NexText(0, 1, "t0"); 
    NexButton  btnPage1 = NexButton( 0, 2, "b0"); 
    NexButton  btnPage0 = NexButton( 1, 1, "b0"); 

    NexTouch *nex_listen_list[] = {  
       &lblText, 
       &btnPage0, 
       &btnPage1, 
       nullptr 
    }; 
/* rest of class not shown */ 
}; 

このエラーで上記のコードの結果:

too many initializers for 'NexTouch* [0]'

はどのようにこの問題を解決するには?

+0

私はVSで '' NextionTest :: nex_listen_list ':配列バインドをクラス内の初期化子から推測することはできません.'(配列サイズを明示的に指定する必要があります) – qxz

答えて

0

あなたはこの方法であなたの配列を初期化することができます

NexTouch* nex_listen_list[4] = { 
    &lblText, 
    &btnPage0, 
    &btnPage1, 
    nullptr 
}; 

はしかし、これは固定サイズ、Cスタイルの配列を定義し、それは私には思える(「NULL終了」を見てから)があなたの文字列と同様に、拡大/縮小され、常にnullptrによって終了される動的配列を持つことです。この場合、それはstd::vectorを使用することをお勧めします:

std::vector<NexTouch*> nex_listen_list = { 
    &lblText, 
    &btnPage0, 
    &btnPage1, 
    nullptr 
}; 

ほとんどの場合nullptr終端は必要ありませんが、それはあなたが、配列で何をしたいかに依存します。古いスタイルの配列を取るAPIに送るでしょうか?この場合、nex_listen_list.data()を使用して埋め込みCスタイルの配列を取得できます。

関連する問題