使用模板时编译错误

时间:2012-03-25 17:56:49

标签: c++ class templates

template<class U, class W>
std::ostream& operator<<( std::ostream & out, const Alias<U, W> & A)
{
    out<<A.ItoS.size()<<std::endl;
    for (std::map<W, U>::const_iterator it = A.ItoS.begin(); it != A.ItoS.end(); it++)
        out<<it -> first<<" "<<it -> second<<std::endl;
    return out;
}

错误在线:
    for (std::map<W, U>::const_iterator it = A.ItoS.begin(); it != A.ItoS.end(); it++)

错误:预期';'在'它'之前

错误:'it'未在此范围内声明

其他类函数没有任何编译问题。

虽然我使用std :: string而不是U而int而不是W一切都很好。 我正在使用Codeblocks 10和MinGW编译器。

1 个答案:

答案 0 :(得分:2)

你忘记了typename

  typename std::map<W, U>::const_iterator it = A.ItoS.begin();
//^^^^^^^

const_iterator是从属名称,因此此处需要typename。有关详细说明,请阅读以下主题:

在C ++ 11中,您只需编写:

 auto it = A.ItoS.begin();

这对C ++程序员来说是一种解脱!