2010-12-03 13 views
6

I 2つのメンバ変数をC++クラスを持っているマップを初期化し、クラスメンバー変数をC++で空に設定しますか?私の大学で使用

std::map<int, Node*> a; 

std::set<Node*> b; 

スタイルチェッカーは、クラスのコンストラクタで初期化するためにすべてのメンバ変数が必要です。これらのメンバ変数abは、それらのクラスのコンストラクタで空にどのように初期化できますか?

+0

あなたは "this works、thanks"という2つのコメントをコメントしました。あなたは今、1つを受け入れるべきです(通常は最初の回答がある場合)。これは一貫して行います。 ;) – Mephane

答えて

11
このよう

std::setstd::map両方として

class A 
{ 
    public : 

    A() : s(), 
     m() 
    { 
    } 


    std::set<int> s; 
    std::map< int, double > m; 
}; 
+0

これは動作します、ありがとう! –

2

このようにSomeClass::SomeClass() : a(), b() {}

+0

これは動作します、ありがとう! –

2

「ユーザー」を持っているあなたは、あなたのクラスを構築しかし、彼らは暗黙的に初期化されるデフォルトのコンストラクタを-declared。あなたは "スタイル"ガイドに従うために特別なことを行う必要はありません。

+0

チャールズありがとう。ここで問題となるのは、スタイルチェックが自動採点システムの一部として自動的に行われ、すべてのメンバー変数を明示的に初期化する必要があることです。 –

+0

@Marek Miettinen:スタイルチェックはPODタイプにのみ適用されるのではないですか?どのような場合でも暗黙的な初期化に使用されるデフォルトのコンストラクタを持つものを明示的に初期化することをスタイルガイドが主張したことは一度もありません。 –

+0

そしてスタイルチェッカーが本当にそれを必要とするならば、それは簡単で壊れています。 – etarion

0

このチェックは、-WeffC++警告オプションが適用されている場合、g ++コンパイラによって実行されます。 詳細については、Scott Meyers、Effective C++、Bookの を参照してください。 メンバ初期化リストを使用してすべてのメンバを初期化することが妥当なのはなぜですか? 基本的には、

+0

どのようにしてこのように説明しますか?効果的なC++リファレンスは良い研究材料ですが、それほど答えはありません。 – ssube

+0

@peachykeen:そうです、これは最初の質問に対する答えよりむしろコメントです。 –

関連する問題