2015-08-08 15 views
8

Der Standard besagt, "Ein Mitglied einer Klasse T kann T nicht als seinen Namen verwenden, wenn das Mitglied ein statisches Datenelement, eine Elementfunktion, ein Elementtyp, eine Elementvorlage, ein Enumerator ist B. einer uncoped-Enumeration, einem Mitglied einer anonymen Unionsmitgliedschaft. Ein nicht statisches Datenelement kann jedoch den Namen T verwenden, solange es keine von Benutzern deklarierten Konstruktoren gibt. "Datenelement mit dem Klassennamen

Wenn ich jedoch diese Klasse erstellen, gibt es einen Kompilierungsfehler.

class G 
{ 
    int G; 
}; 

Ich verwende VS2013. Ist es in Microsoft nicht erlaubt oder?

+3

Was ist der Compiler-Fehler? Dies funktioniert mit Clang und GCC. – Hamdor

+10

microsoft Compiler sind (in) berühmt für ihren Fehler zu jeder Art von Standard zu entsprechen. –

+0

Fehler: C2380: Typ (en) vor 'G' (Konstruktor mit Rückgabetyp oder ungültige Neudefinition des aktuellen Klassennamens?) Also, sie erlauben es nicht :( –

Antwort

3

Wenn VC++ dies nicht erlaubt, ist es ein Fehler.

Allerdings ist diese Sprache "Feature" für den Zweck der C-Kompatibilität, und Microsoft hat entschieden, C nicht zu betonen. Zum Beispiel sind C99 Funktionen in der Regel nicht verfügbar, bis von C++ angenommen. Sie sollten solch ein Mitglied nie absichtlich in C++ deklarieren.

(Es ist in C einfach standardmäßig erlaubt: Es gibt keine Beschränkungen für die Benennung der Mitglieder sind, und alle Mitglieder sind nicht-statische Datenelemente.)

Verwandte Themen