2016-04-23 20 views
1

私は非常に単純なツリーノードをstd::shared_ptrでコンパイルしようとしています。私のコンパイラのオプションで私は-Weffc++-Werrorを使用しますが、私は解決できないと私は理解できない2つのエラーをスローします。-WeffC++ shared_ptrを使った簡単な構造の警告

最小限の例(t.cpp):

#include <memory> 

struct node { 
    std::shared_ptr<node> left; 
    std::shared_ptr<node> right; 
    std::shared_ptr<int> value; 
}; 

int main() { 
    node n; 
    return 0; 
} 

コンパイラからの出力は次のとおりです。

$ LANG=en_US g++ -std=c++14 -Weffc++ t.cpp 
t.cpp: In constructor 'constexpr node::node()': 
t.cpp:3:8: warning: 'node::left' should be initialized in the member initialization list [-Weffc++] 
struct node { 
     ^
t.cpp:3:8: warning: 'node::right' should be initialized in the member initialization list [-Weffc++] 
t.cpp:3:8: warning: 'node::value' should be initialized in the member initialization list [-Weffc++] 
t.cpp: In function 'int main()': 
t.cpp:10:10: note: synthesized method 'constexpr node::node()' first required here 
    node n; 
     ^

私は見つけることができる唯一の事は似this questionですが、それは上の答えはありません残念ながら私の質問。

+1

は、デフォルトコンストラクタを追加してみてください?コンパイラが生成したものが誤ってconstexprであると推測されているように見える –

+0

@RichardHodgesありがとう、あなたのアドバイスはconstexprに関するsecodnd警告のクリーンアップに役立ちました。しかし、** russw_uk **の答えはすべての警告をきれいにする。 –

+0

ああクールです。だから、それは単にeffcフラグまで下がっていました。 –

答えて

0

有効なC++警告が有効になっているため、コンパイラは、イニシャライザリストのメンバフィールドの明示的な初期化を推奨するガイドラインに従わなかったことを警告します。明示的なコンストラクタは、おそらくこの取り払うます追加

node() : left(), right(), value() 
{} 
関連する問題