4 に答える
言う:
Test::Dummy const Test::dummy = { };
http://gcc.gnu.org/wiki/VerboseDiagnostics#uninitialized_const (標準への関連参照を提供) および GCC 4.6 リリース ノートも参照してください。
4.6.0 および 4.6.1 では、ユーザーが宣言したデフォルト コンストラクターが型にない限り、G++ は const 修飾された型のオブジェクトをデフォルトで初期化することを許可しなくなりました。4.6.2 では、G++ は DR 253の提案された解決策を実装しているため、すべてのサブオブジェクトを初期化する場合、デフォルトの初期化が許可されます。コンパイルに失敗したコードは、初期化子を提供することで修正できます。
struct A { A(); };
struct B : A { int i; };
const B b = B();
-fpermissive を使用して、古い非準拠の動作を許可します。
class Dummy
デフォルトの ctor を次の場所に追加することもできます。
class Dummy { public: Dummy(){} };
4行目。
編集: gcc 4.4 が class のデフォルト ctor の生成に失敗したようですDummy
。したがって、上記はこのコンパイラのバグを直接克服します。
gcc 4.4 では、
Test::Dummy const Test::dummy = Test::Dummy;
C++11 をサポートするコンパイラでは、統一された初期化構文を使用できます。
Test::Dummy const Test::dummy = { };
しかし、gcc 4.4 ではサポートされていないと思います。