2010-06-02 46 views
18

下面的C++庫在VS2008VS2008 - > VS2010導致神祕的STL錯誤

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++已經足夠新了,因此我很難搞清楚這一點。

回答

31

您可能在您的某些文件中忘記了#include <iterator>。這是宣佈back_insert_iterator這樣的東西的地方。

在過去,您可能會忘記該頭文件,因爲許多其他標準頭文件也包含它。 VS2010重新組織了它的庫實現的頭文件,使其更符合標準。因此,它缺少對缺少標題的寬容,而<iterator>是一個被忽視的標題。

+0

我很高興微軟團隊正在收緊STL圖書館。我必須爲我們的產品在SDK上這樣做,並且我們必須引入許多這樣的重大更改。但這一切都是最好的。 – 2011-03-21 17:44:23