2016-10-17 5 views
0

をinitializer_list使用してテンプレート機能私はこのようなstd::initializer_listの最小値を計算する簡単な関数を書いた:C++ - パラメータとして

template<typename T> 
inline T min(const std::initializer_list<T>& values) { 
    T minValue = values[0]; 
    for (const auto& v : values) 
     if (v < minValue) minValue = v; 

    return minValue; 
} 

をしかし、私は次のエラーを取得:

error C2027: use of undefined type 'T'
error C2226: syntax error: unexpected type 'std::initializer<_Elem>'
error C2988: unrecognizable template declaration/definition
error C2059: syntax error: ')'
error C2143: syntax error: missing ';' before 'identifier'

I std::vectorstd::initializer_listを変更しようとしましたが、エラーはありませんでした。これは、std::initializer_listをパラメータとしてテンプレート関数を定義できないということですか?私はstd::initializer_listは何operator[]を持っていない、documentationで見るのVisual Studio 2013

+1

[mcve]を入力してください。 'initializer_list'には' operator [] 'はありません。また、['std :: min'](http://en.cppreference.com/w/cpp/algorithm/min)も存在することに注意してください。 – Barry

+0

@Barryこれには、これらのエラーを示す正確なコードがあります。 'min()'関数を呼び出さなくても – DimChtz

+1

[本当に](http://coliru.stacked-crooked.com/a/7acf72dcbc94641c) – jaggedSpire

答えて

2

を使用していますので、この行は:

T minValue = values[0]; 

有効にすることはできません。

T minValue = *values.begin(); 
+0

あなたの答えをありがとう。私はまだ同じエラーが発生します – DimChtz

+1

私はrextester.comのコードをビジュアルコンパイラでテストしました。 'std :: cout <<(min({1、2、3}));'を実行するだけの主要な関数で動作しています。完全な例で質問を編集する必要があります – wasthishelpful

+0

''をインクルードしましたか? – wasthishelpful

関連する問題