2015-08-08 7 views
8

В стандарте указано, «Член класса T не может использовать T как его имя, если член является статическим членом данных, членом-членом, типом-членом, шаблоном-членом, перечислителем из неперечисленного перечисления, член анонимного объединения членов. Однако нестатический член данных может использовать имя T, если нет конструкторов, объявленных пользователем. "член данных с именем класса

Однако, если я создам этот класс, он дает ошибку компиляции.

class G 
{ 
    int G; 
}; 

Я пользуюсь VS2013. Не разрешено ли в Microsoft или?

+3

Что такое ошибка компиляции? Это работает с Clang и GCC. – Hamdor

+10

Компиляторы microsoft (in) известны тем, что не соответствуют стандарту любого типа. –

+0

ошибка: C2380: тип (ы), предшествующий 'G' (конструктор с типом возвращаемого значения или незаконное переопределение текущего имени класса?) Итак, они этого не позволяют :( –

ответ

3

Если VC++ не позволяет этого, это ошибка.

Однако этот язык «функция» предназначен для совместимости с C, и Microsoft решила не подчеркивать C. Например, функции C99 недоступны, как правило, до тех пор, пока они не будут приняты C++. Вы никогда не должны преднамеренно объявлять такого члена на C++.

(Это разрешено в C просто по умолчанию: нет никаких ограничений на именование членов, и все члены нестатические элементы данных.)

 Смежные вопросы

  • Нет связанных вопросов^_^