2012-05-31 10 views
7

私のTestクラスはサブタイプのメンバーであるconststaticを持っています。私は通常、次のようにこのconststaticのメンバーを定義します。静的なconstメンバーを定義する方法は?

class Test 
{ 
public: 
    class Dummy {}; 

private: 
    static Dummy const dummy; 

}; 

Test::Dummy const Test::dummy;    // ERROR HERE 

int main() 
{ 
    return 0; 
} 

このソースをgcc-4.6でコンパイルすると、エラーは発生せず正しくコンパイルされます。

この同じソースをgcc-4.4でコンパイルすると、次のエラーが発生します。 error: uninitialized const ‘Test::dummy’ マークされた行。

  • この静的constメンバー変数を定義する別の方法はありますか?
  • これはgcc-4.4の制限ですか?
  • 回避策はありますか?
+2

'テスト::ダミーCONSTテスト::ダミー=テスト::ダミー(言うGCC 4.6 release notes ); ' – dasblinkenlight

答えて

6

セイ:

Test::Dummy const Test::dummy = { }; 
+0

gcc 4.4では動作しませんか? – bstamour

+1

'Test :: Dummy'が集合体(C++ 03)であるか、常にC++ 11で動作しなければなりません。 –

+0

ああ、ダミーはPODタイプです。 – bstamour

1

あなたもclass Dummyにデフォルトのctorのを追加することができます。

ラインで
class Dummy { public: Dummy(){} }; 

4.

EDIT: GCC 4.4に失敗したことが表示されますクラスDummyのデフォルトのctorを生成します。したがって、上記はこのコンパイラのバグを直接解消します。 GCC 4.4で

+1

それを必要とせず、 'Dummy'にはコンパイラによって合成されたデフォルトのコンストラクタがあります。 – juanchopanza

+0

@juanchopanzaまあ、gcc 4.3.2の下で、上記の問題は修正されていません。*元のコード – Walter

+0

に他の変更を加えないでください... – juanchopanza

0

は、コンパイラはC++ 11を支持して

Test::Dummy const Test::dummy = Test::Dummy; 

を使用するには、均一な初期化構文を使用することができます。

Test::Dummy const Test::dummy = { }; 

をしかし、私はそれがGCC 4.4でサポートされていないと思います。

+0

あなたの最初の解決策はgcc 4.3.2では動作しませんが、2番目の解決策はKerrek SBです。 – Walter

+0

最初のものは、 'Test :: Dummy'ではなく' Test :: Dummy() 'を使うべきです。第2のものでは、一様初期化構文に '=' Test :: Dummy const Test :: dummy {}; –

2

は、(標準に関連する基準を与える)http://gcc.gnu.org/wiki/VerboseDiagnostics#uninitialized_constを見るとも

In 4.6.0 and 4.6.1 G++ no longer allows objects of const-qualified type to be default initialized unless the type has a user-declared default constructor. In 4.6.2 G++ implements the proposed resolution of DR 253 , so default initialization is allowed if it initializes all subobjects. Code that fails to compile can be fixed by providing an initializer e.g.

struct A { A(); }; 
struct B : A { int i; }; 
const B b = B(); 

Use -fpermissive to allow the old, non-conforming behaviour.

関連する問題