initializer_list, не работающий в VC10

я записал эту программу в VC ++ 2010:

class class1
{
public:
 class1 (initializer_list<int> a){};
 int foo;
 float Bar;
};
void main()
{
 class1 c = {2,3};
 getchar();
}

но я получаю это ошибки, когда я компилирую проект:

Ошибка 1 ошибка C2552: 'c': неагрегаты не могут быть инициализированы с c:\users\pswin\documents\visual studio 2010\projects\test_c списка инициализатора ++ 0x\test_c ++ 0x\main.cpp 27

и

2 IntelliSense: инициализация с '{...}' Не позволяется для объекта типа "class1" c:\users\pswin\documents\visual studio 2010\projects\test_c ++ 0x\test_c ++ 0x\main.cpp 27

в чем проблема?

16
задан Georg Fritzsche 8 May 2010 в 00:46
поделиться

1 ответ

Он вообще не должен поддерживаться :

[...] функция базового языка C ++ 0x списков инициализаторов и связанные с ней изменения стандартной библиотеки не были реализованы в VC10.

Сообщение об ошибке относится к функции агрегатной инициализации до C ++ 0x, которая позволяет инициализировать определенные определяемые пользователем типы с помощью фигурных скобок:

struct pair { int first; char second; };
pair p = { 0, 'c' };

Агрегаты определены в §8.5.1 :

Агрегат - это массив или класс (пункт 9) без конструкторов, объявленных пользователем (12.1), без частных или защищенных нестатических элементов данных (пункт 11), без базовых классов (пункт 10), и никаких виртуальных функций (10.3).

Когда агрегат инициализируется, инициализатор может содержать предложение-инициализатора, состоящее из заключенного в фигурные скобки, разделенного запятыми списка предложений-инициализаторов для членов агрегата, записанных в возрастающем нижнем индексе или порядке членов. Если агрегат содержит субагрегаты, это правило рекурсивно применяется к членам субагрегата.

35
ответ дан 30 November 2019 в 16:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: