VS2008 → VS2010 приводит к загадочным ошибкам STL
Следующая библиотека С++ была успешно скомпилирована в VS2008
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));
Если бы кто-нибудь мог дать мне какое-то направление, я был бы признателен. Я достаточно новый для С++, что мне сложно определить этот вариант.
Ответы
Ответ 1
Вероятно, вы забыли #include <iterator>
в некоторых ваших файлах. То, что объявлены такие вещи, как back_insert_iterator
.
В прошлом вы могли бы забыть этот заголовочный файл, поскольку многие другие стандартные заголовки также включили его. VS2010 реорганизовал заголовки для реализации своей библиотеки в соответствии со стандартами. В результате, он гораздо менее прощает отсутствующие заголовки, а <iterator>
- обычно недооцениваемый.
Ответ 2
Из MSDN:
Заголовок больше не включается автоматически многими другими файлами заголовков. Вместо этого включите этот заголовок явно, если вам нужна поддержка автономных итераторов, определенных в заголовке.
http://msdn.microsoft.com/en-us/library/bb531344.aspx