Форум программистов, компьютерный форум CyberForum.ru

Почему не работает агрегатная инициализация? - C++

Восстановить пароль Регистрация
 
DUMP
54 / 28 / 7
Регистрация: 22.02.2015
Сообщений: 240
27.01.2016, 13:23     Почему не работает агрегатная инициализация? #1
Всем привет ! Вот есть структура:
C++
1
2
3
4
5
struct Size{
    float width, height;
    Size();
    Size(const float width,const float height);
};
Друг работает в mvs 2013 и написал такой код и у него работает:
C++
1
2
3
4
5
6
7
8
9
10
11
const Size sizesWindow[] = {
    { 640, 480 },
    { 720, 576 },
    { 800, 600 },
    { 960, 540 },
    { 1024, 768 },
    { 1280, 960 },
    { 1280, 1024 },
    { 1600, 1200 },
    { 1920, 1080 }
};
У меня в mvs 2008 компилятор ругается и пишет:
Код
error C2552: 'sizesWindow' : non-aggregates cannot be initialized with initializer list
1>        'Size' : Types with user defined constructors are not aggregate
Пришлось переписать код через конструктор и всё работает:
C++
1
2
3
4
5
6
7
8
9
10
11
const Size sizesWindow[] = {
    Size( 640, 480 ),
    Size( 720, 576 ),
    Size( 800, 600 ),
    Size( 960, 540 ),
    Size( 1024, 768 ),
    Size( 1280, 960 ),
    Size( 1280, 1024 ),
    Size( 1600, 1200 ), 
    Size( 1920, 1080 )
};
Так почему же у друга всё пашет , а у меня проблема ?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2016, 13:23     Почему не работает агрегатная инициализация?
Посмотрите здесь:

C++ Почему не работает?
Инициализация переменных - некорректно работает пример из книги C++
C++ Агрегатная инициализация std::array в сочетании с "new"
C++ Почему не работает gets?
C++ Не работает. Почему?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
27.01.2016, 13:26     Почему не работает агрегатная инициализация? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
DUMP, Потому что тип не аггрегат, т.к. есть конструктор. MSVC 2013 поддерживает С++11 в котором возможно инициализировать списком инициализации.
elch10
37 / 20 / 3
Регистрация: 27.04.2015
Сообщений: 156
Завершенные тесты: 1
27.01.2016, 14:05     Почему не работает агрегатная инициализация? #3
Может быть глупый вопрос, а что такое агрегат?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,920
Записей в блоге: 2
Завершенные тесты: 1
27.01.2016, 14:53     Почему не работает агрегатная инициализация? #4
Цитата Сообщение от elch10 Посмотреть сообщение
а что такое агрегат?
Вот:
8.5.1
1. An aggregate is an array or a class (Clause 9) with no user-provided constructors (12.1), no brace-or-equal-
initializers for non-static data members (9.2), no private or protected non-static data members (Clause 11),
no base classes (Clause 10), and no virtual functions (10.3).
Yandex
Объявления
27.01.2016, 14:53     Почему не работает агрегатная инициализация?
Ответ Создать тему
Опции темы

Текущее время: 09:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru