2017-09-14 3 views
1

NULLへのポインタの配列を初期化するためにいくつかの他の方法があります私はstruct constructorを使って構造体内のポインタの配列を初期化するには?

struct TreeNode { 
    bool exist; 
    bool word_ending; 
    TreeNode* branches[3]; 
    TreeNode(): exist(true), word_ending(false) { 
     memset(branches, NULL, sizeof(branches)); 
    } 
}; 

ようmemsetを試みたが、警告

warning: implicit conversion of NULL constant to 'int' [-Wnull-conversion] 
     memset(branches, NULL, sizeof(branches)); 
     ~~~~~~   ^~~~ 
         0 
1 warning generated. 

が表示されますか?

+0

'TreeNode * branches [3] = {};'が宣言されています。 – nwp

+0

NULLは0と等価ではありませんか? –

+1

ソースでNULLを0に変更すると、コンパイルは正常に行われます。しかし、NathanOliverが提案したようにしてください。 –

答えて

4

memsetを使用する代わりに、メンバー初期化リストで配列を初期化できます。使用する場合

TreeNode(): exist{true}, word_ending{false}, braches{} {} 

brachesはゼロに初期化されます。これは、初期化リスト内のそれぞれの不足しているイニシャライザが対応する要素をゼロに初期化するために機能します。

+0

ありがとう!しかしnullptrでブランチを初期化する方法は? 0と同じではありません。 – danche

+0

@danche 0はヌルポインタです。 'nullptr'はポインタ型にキャストされるだけです。 – NathanOliver

+0

だから 'branches {nullptr、nullptr、nullptr}'は必要ありません。 – danche

関連する問題