1

可能重复:
我必须在哪里以及为什么要放置“模板”和“类型名称”关键字?
编译器无法识别模板函数中的映射迭代器

我有一个模板函数,其中有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);

请参阅在哪里以及为什么必须放置“模板”和“类型名称”关键字?更多细节

正如Zoidberg'所评论的,C++11auto指示编译器推断类型。请参阅现代 C++ 风格的元素以获得简要概述(以及其他一些功能)。

于 2012-12-06T12:27:22.680 回答