я записал эту программу в 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
в чем проблема?
Он вообще не должен поддерживаться :
[...] функция базового языка 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).
Когда агрегат инициализируется, инициализатор может содержать предложение-инициализатора, состоящее из заключенного в фигурные скобки, разделенного запятыми списка предложений-инициализаторов для членов агрегата, записанных в возрастающем нижнем индексе или порядке членов. Если агрегат содержит субагрегаты, это правило рекурсивно применяется к членам субагрегата.