Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Aktualisiert: November 2007
Beim Aktualisieren eines Programms mit Code aus der C++-Standardbibliothek, der in Visual C++ 6.0 kompiliert wurde, sollten Sie Folgendes beachten:
Änderungen an der reverse_iterator-Klasse
Einige Iteratoren haben nicht mehr die Funktionsweise von Zeigern
Änderungen bei "MIN/MAX #define"
Änderungen an der reverse_iterator-Klasse
Die Namen einiger Typen, die durch die reverse_iterator-Klasse der C++-Standardbibliothek definiert werden, haben sich geändert. Außerdem sind verschiedene Vorlagenargumente für diese Klasse verfügbar.
Das folgende, in Visual C++ 6.0 kompilierte Beispiel schlägt in der aktuellen Version fehl.
#include <iterator>
#include <vector>
typedef std::iterator<std::random_access_iterator_tag, char, int> random_it;
int main( )
{
char c;
// too many template args for VC7
typedef std::reverse_iterator< random_it, char, char&, char *, int > rev_it;
rev_it::reference_type x = c;
rev_it::pointer_type y = 0;
rev_it::iter_type z;
/*
// try the following code instead
typedef std::reverse_iterator< random_it > rev_it;
rev_it::reference a = c;
rev_it::pointer b = 0;
rev_it::iterator_type c1;
*/
}
Einige Iteratoren haben nicht mehr die Funktionsweise von Zeigern
In einigen Klassen der C++-Standardbibliothek sind Iteratoren nicht mehr als Zeigertypen definiert.
Die folgenden Codezeilen des in Visual C++ 6.0 kompilierten Beispiels können in der aktuellen Version nicht kompiliert werden.
#include <string>
#include <vector>
#include <algorithm>
bool pred(int i) {
return true;
};
int main()
{
std::string str("test");
const char *pszstr = str.begin(); // LINE 8: INCORRECT
const char *pszStr2 = str.c_str(); // OK
const char *pszStr3 = &(*str.begin()); // OK
std::vector<int> v;
int *pint = std::remove_if(v.begin(), v.end(), pred); // LINE 13: INCORRECT
std::vector<int>::iterator iint = std::remove_if(v.begin(), v.end(), pred); // OK
}
Änderungen bei "MIN/MAX #define"
Die Definition von _MIN und _MAX wurde in der C++-Standardbibliothek geändert, und zwar von
#define _MAX _cpp_max
#define _MIN _cpp_min
in:
#define _MAX (max)
#define _MIN (min)
Dadurch werden die Definitionen von std::_MIN ungültig.
Die folgenden Codezeilen des in Visual C++ 6.0 kompilierten Beispiels können in der aktuellen Version nicht kompiliert werden.
#include <xutility>
#include <stdlib.h>
using namespace std;
int main()
{
std::_MAX(3,4); // error
_MAX(4,5);
}