VS2008 - > VS2010导致隐藏的STL错误

时间:2010-06-02 15:39:31

标签: visual-studio-2008 visual-studio-2010 stl

在VS2008中成功编译了以下C ++库

http://sourceforge.net/projects/xmlrpcc4win/files/xmlrpcc4win/XmlRpcC4Win1.0.8.zip/download

当我在VS2010中打开它时,它会经历转换向导过程而没有任何错误。

现在,当我尝试在VS2010中编译它时,我得到了一些奇怪的STL错误,如下所示:

1>TimXmlRpc.cpp(1018): error C2039: 'back_insert_iterator' : is not a member of 'std'
1>TimXmlRpc.cpp(1018): error C2065: 'back_insert_iterator' : undeclared identifier
1>TimXmlRpc.cpp(1018): error C2275: 'XmlRpcValue::BinaryData' : illegal use of this type as an expression
1>TimXmlRpc.cpp(1018): error C2065: 'ins' : undeclared identifier
1>TimXmlRpc.cpp(1018): error C2039: 'back_inserter' : is not a member of 'std'
1>TimXmlRpc.cpp(1018): error C3861: 'back_inserter': identifier not found
1>TimXmlRpc.cpp(1019): error C2065: 'ins' : undeclared identifier
1>TimXmlRpc.cpp(1031): error C2039: 'back_insert_iterator' : is not a member of 'std'
1>TimXmlRpc.cpp(1031): error C2065: 'back_insert_iterator' : undeclared identifier
1>TimXmlRpc.cpp(1031): error C2275: 'std::vector<_Ty>' : illegal use of this type as an expression
1>          with
1>          [
1>              _Ty=char
1>          ]
1>TimXmlRpc.cpp(1031): error C2065: 'ins' : undeclared identifier
1>TimXmlRpc.cpp(1031): error C2039: 'back_inserter' : is not a member of 'std'
1>TimXmlRpc.cpp(1031): error C3861: 'back_inserter': identifier not found
1>TimXmlRpc.cpp(1032): error C2065: 'ins' : undeclared identifier

我不确定如何制作其中一些。例如, back_insert_iterator实际上是std的成员,但VS似乎并不认为它。

如何修复这些错误?他们似乎没有多大意义所以我不知道从哪里开始。也许是我项目设置中的东西?

例如,这里是第1018行,它给出了std错误:

std::back_insert_iterator<BinaryData> ins = std::back_inserter(*(u.asBinary));

如果有人能给我一些方向,我会很感激。我对C ++足够新,以至于我很难搞清楚这个。

2 个答案:

答案 0 :(得分:31)

您可能忘记了某些文件中的#include <iterator>。这就是声明back_insert_iterator之类的东西。

在过去,您可以忘记该头文件,因为许多其他标准头文件也包括它。 VS2010重新组织了其库实现的标头,使其更符合标准。因此,它对丢失标题的宽容度要低得多,<iterator>是一个常被忽视的标题。

答案 1 :(得分:3)

来自MSDN:

许多其他头文件不再自动包含标头。相反,如果需要支持标头中定义的独立迭代器,请显式包含该标头。

http://msdn.microsoft.com/en-us/library/bb531344.aspx