2016-07-02 11 views
-1

私が持っているこのクラス:期待の一次式「;」トークン

#pragma once 

#include <iostream> 

namespace Ispit 
{ 
    template <class T> 
    class Value 
    { 
     template <class Y> 
     friend std::ostream& operator<<(std::ostream&, const Value<Y>&) noexcept; 
     public: 
      Value() noexcept; 
      Value(T val) noexcept; //{ podatak = val;} 
      Value& operator()(); 
      bool operator<(const Value&); 
      virtual void print(std::ostream&) const noexcept; 
      virtual ~Value(); 
     protected: 
      T podatak; 
    }; 

    template <class T> 
    std::ostream& operator<<(std::ostream& out, const Value<T>& val) noexcept 
    { 
     val.print(out); 
     return out; 
    } 

    template <class T> 
    Value<T>::Value() noexcept : podatak(T()) {} 

    template <class T> 
    Value<T>::Value(T val) noexcept //: podatak(T) {} 
    { 
     podatak = T; // this where the error occurs 
    } 

    template <class T> 
    Value<T>& Value<T>::operator()() 
    { 
     return podatak; 
    } 
} 

をコンパイルし、このエラーを与える:

expected primary-expression before ‘;’ token 

は、このエラーが発生する理由と、私はそれをどのように修正することができますか?

さまざまな場所でテンプレート単語を追加しようとしましたが、変数のルールが見つかりませんでした(これがthigの場合はわかりません)。

関数がインラインであっても動作しません...

コンパイラはgcc 5.2.1

+2

メンバ変数 'podatak'に*タイプ*' T'を割り当てようとしています。 'podatak = val'を試してみてください。(もっと良いのは、メンバ初期化子リスト':podatak(val) 'に移動してください。 – WhozCraig

+0

@WhozCraig私はこれをやったと信じられません-_- –

+2

眠っていないことは、downvotingに対して有効な防御ではありません。愚かな悪戯で私たちの時間を無駄にするのではなく、もう一度あなたの問題を解決しようとする前に、いくつかの睡眠を取得します。転記する前に –

答えて

4

あなたは変数にタイプを割り当てる:

template <class T> 
Value<T>::Value(T val) noexcept 
{ 
    podatak = T; 
} 

これは次のようになります。

template <class T> 
Value<T>::Value(T val) noexcept 
{ 
    podatak = val; 
} 

以上の場合、メンバー初期化リスト:

template <class T> 
Value<T>::Value(T val) noexcept : podatak(val) {} 

また、あなたはあなたのデフォルトコンストラクタを削除し、1つの引数のコンストラクタとそれを組み合わせることができます:

// Remove this code 
// template <class T> 
// Value<T>::Value() noexcept : podatak(T()) {} 

// Combine the above into this 
    template <class T> 
    Value<T>::Value(T val = T()) noexcept : podatak(val) {} 

引数が指定されていない場合は、上記の基本的にあなたの元のデフォルトを組み合わせ、Tタイプをcontructデフォルト設定されます1つの引数コンストラクタにコンストラクタを追加します。

+0

結合されたコンストラクタは、移動のみの 'T'で失敗します。 – Angew

関連する問題