C++ c++;调用方法时出错

C++ c++;调用方法时出错,c++,gcc,C++,Gcc,我有以下在Visual Studio 10中工作的代码,我想将其移植到Linux->GCC上: parse( v, srcUtf8.begin(), srcUtf8.end() ); <-- ERROR parse(v,srcUtf8.begin(),srcUtf8.end()) 问题是函数parse具有类型为Iter&pos的第二个参数,这是一个非常量引用 template <typename Iter> inline std::string parse(value&

我有以下在Visual Studio 10中工作的代码,我想将其移植到Linux->GCC上:

parse( v, srcUtf8.begin(), srcUtf8.end() ); <-- ERROR

parse(v,srcUtf8.begin(),srcUtf8.end()) 问题是函数
parse
具有类型为
Iter&pos
的第二个参数,这是一个非常量引用

template <typename Iter> inline std::string parse(value& out, Iter& pos, const Iter& last)
或者编写迭代器的显式类型,而不是类型说明符
auto
。例如,如果它是类std::string的迭代器,那么

std::string::iterator it = srcUtf8.begin();
parse( v, it, srcUtf8.end() ); 
或者如果srcUtf8是一个常量对象,那么

std::string::const_iterator it = srcUtf8.begin();
parse( v, it, srcUtf8.end() ); 

对于MS VC++ 2010,它有很多bug或自己的语言扩展,不满足C++标准。

你是如何创建<代码> SRTCF8>代码>?你不需要VS的原因是因为这个“弗拉德谢谢FRO建议”。正在尝试auto-it=srcUtf8.begin();我得到这个错误:
此行有多个标记-无法在初始化中将“\uu gnu\u cxx::\uuu normal\u iterator”转换为“int”-“auto”将在C++0x中改变含义;请删除它——ISO C++禁止声明“没有”类型< /Calp> @克里斯蒂安,看来你使用的编译器不支持C++ 2011。你应该打开电源。否则写入,而不是自动std::string::iterator@Vlad,是的,我需要使用GCC 4.4.7或更高版本,忘记提到这一点。我已经做了更改,编译时没有错误。谢谢。@NathanOliver:但是如果你设置了适当的警告级别,VC会发出警告。对格式错误的代码发出警告足以满足ISO标准要求,因为该标准不区分警告和错误(您可以使用
/Za
将其设置为错误)。
auto it = srcUtf8.begin();
parse( v, it, srcUtf8.end() ); 
std::string::iterator it = srcUtf8.begin();
parse( v, it, srcUtf8.end() ); 
std::string::const_iterator it = srcUtf8.begin();
parse( v, it, srcUtf8.end() );