2010-06-02 6 views
18

Die folgende C++ Bibliothek in VS2008 erfolgreich kompiliert wurdeVS2008 -> VS2010 führt zu kryptischen STL Fehler

http://sourceforge.net/projects/xmlrpcc4win/files/xmlrpcc4win/XmlRpcC4Win1.0.8.zip/download

Wenn ich es in VS2010 öffnen, geht es durch den Konvertierungsassistent Prozess ohne Fehler.

Nun, wenn ich es in VS2010 zu kompilieren versuchen, erhalte ich einige seltsame STL Fehler wie diese:

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 

Ich bin nicht sicher, was einige von ihnen zu machen. Zum Beispiel ist back_insert_iterator in der Tat ein Mitglied von std, aber VS scheint nicht zu denken, dass es ist.

Wie behebe ich Fehler wie diese? Sie scheinen einfach keinen Sinn zu machen, deshalb bin ich mir nicht sicher, wo ich anfangen soll. Vielleicht ist es etwas in meinen Projekteinstellungen?

Zum Beispiel, hier ist die Linie 1018, die die std Fehler gibt:

std::back_insert_iterator<BinaryData> ins = std::back_inserter(*(u.asBinary)); 

Wenn jemand mir irgendeine Richtung geben könnte ich es schätzen würde. Ich bin neu genug für C++, dass es mir schwer fällt, diesen herauszufinden.

Antwort

31

Wahrscheinlich haben Sie in einigen Ihrer Dateien #include <iterator> vergessen. Dort werden Dinge wie back_insert_iterator deklariert.

In der Vergangenheit konnte man mit dem Vergessen dieser Header-Datei davonkommen, da viele der anderen Standard-Header es auch enthalten. VS2010 reorganisierte die Header für seine Bibliotheksimplementierung, um mehr standardkonform zu sein. Folglich ist es viel weniger fehlerverzeihend für fehlende Header und <iterator> ist eine häufig übersehene.

+0

Ich bin froh, dass das Microsoft-Team die STL-Bibliothek strafft. Ich musste das für das SDK für unser Produkt tun, und wir mussten viele einschneidende Änderungen wie folgt einführen. Aber es war alles zum Besten. –

3

Von MSDN:

Der Header nicht mehr automatisch von vielen anderen Header-Dateien enthalten ist. Fügen Sie diesen Header stattdessen explizit hinzu, wenn Sie Unterstützung für die eigenständigen Iteratoren benötigen, die im Header definiert sind.

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

Verwandte Themen