代码之家  ›  专栏  ›  技术社区  ›  Jake Wilson

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

  •  18
  • Jake Wilson  · 技术社区  · 15 年前

    在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::back_insert_iterator<BinaryData> ins = std::back_inserter(*(u.asBinary));
    

    如果有人能给我一个方向,我会感激的。我对C++有了新的认识,我很难弄清楚这个。

    2 回复  |  直到 13 年前
        1
  •  31
  •   Adrian McCarthy    15 年前

    你可能忘记了 #include <iterator> 在一些文件中。事情就是这样的 back_insert_iterator 声明。

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

        2
  •  3
  •   Sean Hubbell    13 年前

    来自MSDN:

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

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