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

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

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

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

27.01.2016, 13:23. Просмотров 169. Ответов 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     Почему не работает агрегатная инициализация?
Посмотрите здесь:

Агрегатная инициализация std::array в сочетании с "new" - C++
Можно ли сочетать агрегатную инициализацию контейнера STL с динамическим его созданием с помощью `new`? Перепробовал всё, что казалось...

Инициализация с помощью конструктора без параметров. Почему не нужны скобки? - C++
Доброго времени суток форумчане. Такой вопрос , почему в конструкторе без параметров не нужно ставить пустых скобочек? вот пример, делаю...

Почему после конструктора первого класса стоит двоеточие и имя переменной, а не инициализация? - C++
#include <iostream> template <typename T> class first { public: T value; first (T n) : value(n) {} virtual...

Инициализация переменных - некорректно работает пример из книги - C++
Взял задачку из книги Г.Шилда. Должно показывать 1 3 6 10 15. Но у меня выдает 1 2 3 4 5. Набрал всё точь в точь с книги, в чём проблема,...

почему не работает? - C++
решил по практиковаться с выделением динамической памяти: почему не работает код: #include <iostream> using namespace std; int...

почему-то не работает - C++
ошибок компилятор не видит, но компилировать отказывается (dev-cpp + mingw). ошибки в работе программы меня мало волнуют, но надо чтобы она...

Почему не работает gets? - C++
Хочу чтобы функция создавала массив строку. Всё работало если указывать фиксированный размер массива, но я захотел , чтобы main()...

Почему не работает if-else - C++
Привет, форумчане! Значицца, так, дано задание (опущу ненужное) задать диапазон массива от 1 до 20. >Если да, то выполнять следующее...

Почему не работает? - C++
Почему не работет программа? #include <stdio.h> #include <conio.h> #include <iostream> #include <ctime> #define N 10 ...

Почему не работает??? - C++
Прога должна считать количество нулевых элементов, и элементов в диапазоне от 7 до 10. А на экран выводится какие-то отрицательные...

Почему не работает? - C++
Здравствуйте уважаемые программисты! Вроде должно работать. Программа считает среднее арифметическое значение: Вот код. #include...

почему не работает? - C++
#include "stdafx.h" #include<iostream> struct item; item *Insert(item *tree); item *InOrder(item *tree); struct item { ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
27.01.2016, 13:26     Почему не работает агрегатная инициализация? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
DUMP, Потому что тип не аггрегат, т.к. есть конструктор. MSVC 2013 поддерживает С++11 в котором возможно инициализировать списком инициализации.
elch10
38 / 21 / 4
Регистрация: 27.04.2015
Сообщений: 164
Завершенные тесты: 2
27.01.2016, 14:05     Почему не работает агрегатная инициализация? #3
Может быть глупый вопрос, а что такое агрегат?
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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     Почему не работает агрегатная инициализация?
Ответ Создать тему
Опции темы

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