1

重複の可能性:
「template」および「typename」キーワードをどこに、なぜ配置する必要があるのですか?
コンパイラによって認識されないテンプレート関数のマップイテレータ

インスタンス化されたテンプレート関数がありstd::map::iteratorます-

template <class B , class C> 
C getValue (B& myMap , C returnType) {
    map<string,C>::iterator it = myMap.find(var);
    // implementation ...
}

そしてそれはエラーを促します-

In function ‘C getValue(char*, B&, C)’:
error: expected ‘;’ before ‘it’
error: ‘it’ was not declared in this scope

どうすればきちんと作ることができますか?

4

1 に答える 1

3

これは依存型なので、次のものが必要ですtypename

typename map<string,C>::iterator it = myMap.find(var);

「template」および「typename」キーワードをどこに、なぜ配置する必要があるのか​​を参照してください。詳細については。

Zoidberg'がコメントしたように、C ++ 11にはauto、型を推測するようにコンパイラーに指示するものがあります。簡単な概要(他のいくつかの機能を含む)については、最新のC++スタイルの要素を参照してください。

于 2012-12-06T12:27:22.680 に答える