VS2008 -> VS2010 приводит к загадочным ошибкам STL - PullRequest
18 голосов
/ 02 июня 2010

Следующая библиотека C ++ была успешно скомпилирована в 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));

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

Ответы [ 2 ]

31 голосов
/ 02 июня 2010

Возможно, вы забыли #include <iterator> в некоторых ваших файлах. Вот где объявляются такие вещи, как back_insert_iterator.

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

3 голосов
/ 11 октября 2011

Из MSDN:

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

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

...