Übersicht über die wichtigsten Änderungen bei der Kompilierzeit

Aktualisiert: November 2007

In diesem Thema sind die Fehler und Warnungen zur Kompilierzeit zusammengefasst, die nun für Code ausgegeben werden, der vor Visual C++ 2003 ohne Fehler oder Warnungen kompiliert wurde. Einige auf die Konformität bezogene wichtige Änderungen zur Kompilierzeit wurden jedoch in Visual C++ 2005 eingeführt.

  • Für die definierte Präprozessordirektive (C2004) sind jetzt schließende Klammern erforderlich.

  • Fehlendes typename-Schlüsselwort und explizite Spezialisierungen suchen nicht mehr Vorlagenparameter aus der primären Vorlage (C2146).

  • Auf einen geschützten Member (n) kann nur über eine Memberfunktion einer Klasse (B) zugegriffen werden, die von der Klasse (A) erbt, der (n) als Member angehört (C2247).

  • Verbesserte Zugriffsprüfungen im Compiler erkennen jetzt Basisklassen, auf die kein Zugriff möglich ist (C2247).

  • Eine explizite Spezialisierung darf kein Kopierkonstruktor oder Kopierzuweisungsoperator sein (C2299).

  • Eine Ausnahme kann nicht aufgefangen werden, wenn auf den Destruktor und/oder den copy-Konstruktur nicht zugegriffen werden kann (C2316).

  • Standardargumente für Zeiger auf Funktionen sind nicht mehr zugelassen (C2383).

  • Ein statischer Datenmember darf nicht über eine abgeleitete Klasse initialisiert werden (C2477).

  • Die Initialisierung einer typedef ist gemäß Standard nicht zulässig und verursacht jetzt einen Compilerfehler (C2513).

  • bool ist jetzt ein richtiger Typ (C2632).

  • Ein UDC kann jetzt Mehrdeutigkeit mit überladenen Operatoren erstellen (C2666).

  • Eine Qualifikationskonvertierung und eine Identitätskonvertierung weichen voneinander ab (C2666).

  • Mehr Ausdrücke werden jetzt als gültige NULL-Zeiger-Konstanten angesehen (C2668).

  • template<> ist jetzt an Stellen erforderlich, wo der Compiler es vorher abgeleitet hat (C2768).

  • Die explizite Spezialisierung einer Memberfunktion außerhalb der Klasse ist ungültig, wenn die Funktion bereits über eine Vorlagenklassenspezialisierung explizit spezialisiert wurde (C2910).

  • Für jede explizite Spezialisierung müssen die Parameter der expliziten Spezialisierung ausgewählt werden, sodass diese mit den Parametern der primären Vorlage übereinstimmen (C2912).

  • Nichttyp-Vorlagenparameter mit Gleitkomma sind nicht mehr zulässig (C2993).

  • Klassenvorlagen dürfen nicht als Vorlagentypargumente verwendet werden (C3206).

  • Friend-Funktionsnamen werden nicht mehr im enthaltenden Namespace eingeführt (C3767).

  • Verbesserte Zeiger-zu-Member-Übereinstimmung (C3867).

  • Zusätzliche Kommas in Makros werden vom Compiler nicht mehr akzeptiert (C4002).

  • Ein Objekt des POD-Typs, das mit dem Initialisierer des Formulars () erstellt wurde, wird standardmäßig initialisiert (C4345).

  • typename ist jetzt erforderlich, wenn ein abhängiger Name als Typ behandelt werden soll (C4346).

  • Funktionen werden nicht mehr fälschlicherweise als Vorlagenspezialisierungen angesehen (C4347).

  • Statische Datenmember dürfen nicht über eine abgeleitete Klasse initialisiert werden (C4356).

  • Die Spezialisierung einer Klassenvorlage muss vor der Verwendung in einem Rückgabetyp definiert werden (C4686).

  • Der Compiler meldet jetzt nicht erreichbaren Code (C4702).

  • Eine friend-Deklaration, die eine neue, nicht auf einer Vorlage basierende Funktion deklariert, muss definiert werden (LNK2019).

Siehe auch

Referenz

Wichtige Änderungen im Visual C++-Compiler