与map <t,int =“”> :: iterator </t,>的编译器错误

时间:2013-04-19 11:07:16

标签: c++ g++

使用Visual Studio 2012时,以下代码编译时没有错误(T是模板参数):

pair<map<T, int>::iterator, bool> ret;

但是,当我使用g ++时,它会抛出错误消息

error: type/value mismatch at argument 1 in template parameter list for template<class _T1, class _T2> struct std::pair

由于某种原因,它不会将map<T, int>::iterator识别为类型。我应该如何解决这个问题呢?

2 个答案:

答案 0 :(得分:5)

您需要告诉编译器限定标识map<T, int>::iterator确实是一种类型(它可以是静态成员

pair<typename map<T, int>::iterator, bool> ret;
     ^^^^^^^^

似乎一次,因为VS总是比g ++做错了更好

答案 1 :(得分:2)

默认情况下,假设从属名称不是类型,除非您明确说明。

使用它来做到这一点:

typename map<T, int>::iterator