2016-08-23 25 views
0

プロジェクトに次のコードがあります。それはエラーC2059、構文エラー "新しい" unique_ptr行が間違っています。unique_ptrが初期化できません

#include <memory> 

class Nothing { 
public: 
    Nothing() { }; 
}; 
class IWriter 
{ 
    public: 
     IWriter() { 
     } 

     ~IWriter() { 
     } 
    private: 
     std::unique_ptr<Nothing> test(new Nothing()); 
}; 

ここで何が起こっているか

+0

私は両方 'テスト(新しいNothing)をテストした;'と 'テスト(新ナッシング( )); ' – SinisterMJ

+2

定義ではなく、コンストラクタで初期化する必要があります。 – David

+1

@DavidこれはC++ 11以降で可能です。 –

答えて

4

あなたはdefault member initializerを間違った方法で使用しようとしています。 ブレース初期化子(またはメンバー初期化に等しい)(メンバー宣言に含まれています)である必要があります。

あなたは(C++ 11以降)list initializationを使用することができます。

std::unique_ptr<Nothing> test{ new Nothing() }; 

またはmember initialization list

class IWriter 
{ 
    public: 
     IWriter() : test(new Nothing) { 
     } 
     ~IWriter() { 
     } 
    private: 
     std::unique_ptr<Nothing> test; 
}; 
+0

リストの初期化はC++ 11 + –

+3

にのみ有効です。 'unique_ptr'はC++ 11以降の一部であり、C++ 11は5歳。 「C++ 11」以降はどのくらいの期間書いておく必要がありますか? – Tas

+0

興味深いことに、リストの初期化は機能しませんでした(VS2013)。 – SinisterMJ

関連する問題