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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
DUMP
57 / 31 / 7
Регистрация: 22.02.2015
Сообщений: 246
#1

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

27.01.2016, 13:23. Просмотров 152. Ответов 3
Метки нет (Все метки)

Всем привет ! Вот есть структура:
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     Почему не работает агрегатная инициализация?
Посмотрите здесь:

Теория. Почему в данном случае copy() не работает после reserve(), но работает после resize()? C++
C++ почему-то не работает
C++ Почему не работает?
C++ почему не работает?
Почему не работает C++
C++ Почему не работает?
Инициализация переменных - некорректно работает пример из книги C++
C++ Агрегатная инициализация std::array в сочетании с "new"
C++ Почему не работает gets?
C++ Инициализация с помощью конструктора без параметров. Почему не нужны скобки?
C++ Почему после конструктора первого класса стоит двоеточие и имя переменной, а не инициализация?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
27.01.2016, 13:26     Почему не работает агрегатная инициализация? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
DUMP, Потому что тип не аггрегат, т.к. есть конструктор. MSVC 2013 поддерживает С++11 в котором возможно инициализировать списком инициализации.
elch10
37 / 20 / 3
Регистрация: 27.04.2015
Сообщений: 161
Завершенные тесты: 2
27.01.2016, 14:05     Почему не работает агрегатная инициализация? #3
Может быть глупый вопрос, а что такое агрегат?
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12528 / 7090 / 797
Регистрация: 27.09.2012
Сообщений: 17,500
Записей в блоге: 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     Почему не работает агрегатная инициализация?
Ответ Создать тему
Опции темы

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