Подтвердить что ты не робот

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));

Если бы кто-нибудь мог дать мне какое-то направление, я был бы признателен. Я достаточно новый для С++, что мне сложно определить этот вариант.

4b9b3361

Ответ 1

Вероятно, вы забыли #include <iterator> в некоторых ваших файлах. То, что объявлены такие вещи, как back_insert_iterator.

В прошлом вы могли бы забыть этот заголовочный файл, поскольку многие другие стандартные заголовки также включили его. VS2010 реорганизовал заголовки для реализации своей библиотеки в соответствии со стандартами. В результате, он гораздо менее прощает отсутствующие заголовки, а <iterator> - обычно недооцениваемый.

Ответ 2

Из MSDN:

Заголовок больше не включается автоматически многими другими файлами заголовков. Вместо этого включите этот заголовок явно, если вам нужна поддержка автономных итераторов, определенных в заголовке.

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