Ich habe den folgenden Code.Probleme mit remove_if in VS2010 bei Verwendung der Sätze
#include <set>
#include <algorithm>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
typedef set<long> MySet;
MySet a;
for(int i = 0; i < 10; ++i)
{
a.insert(i);
}
MySet::iterator start,end,last;
start = a.begin();
end = a.end();
last = remove_if(start,end,bind2nd(less_equal<long>(),5));
return 0;
}
Welche unter VS2005 verwendet, um gut zu kompilieren. Jedoch VS2010 verwenden ich folgende Fehlermeldung erhalten:
Fehler 1 Fehler C3892: '_Next': Sie nicht zu einer Variablen zuweisen können, die const c: \ Programme \ Microsoft Visual Studio 10.0 \ vc \ include \ Algorithmus
Wenn ich den Container einen Vektor mache, ist alles in Ordnung.
Ich vermute, dass sich etwas im Standard geändert hat, was mir nicht bewusst ist, kann jemand bitte etwas Licht darauf werfen, warum das nicht mehr funktioniert?
Ich nehme an, es ist offensichtlich, wenn Sie darüber nachdenken. Ich habe ein riesiges Projekt konvertiert, das wir von vc6 nach vs2005 und jetzt nach vs2010 gezogen haben, und ich habe viele kleine Fehler. Danke für das Entfernen meines Blockes. Ich dachte VS2005 war ziemlich streng, ich denke nicht so streng wie vs2010. – Rich
Haben Sie einen Workaround dafür? Kann ich etwas anstelle von remove_if verwenden? – julienln
@julienln: Sie könnten 'std :: remove_copy_if' verwenden, um einen neuen Container ohne die Elemente zu erstellen, die Sie nicht möchten, oder Sie können Elemente einzeln suchen und löschen. –