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

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

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

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

27.01.2016, 13:23. Просмотров 193. Ответов 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 )
};
Так почему же у друга всё пашет , а у меня проблема ?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2016, 13:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему не работает агрегатная инициализация? (C++):

Агрегатная инициализация 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++
почему выводится в виде таблицы? почему не работает сортировка? и как туда можно вставить классы комнат? hotel.h #include...

Почему программа не работает на MFC статичной библиотеки. а вот на стандартном мфс работает - C++
почему программа не работает на MFC статичной библиотеки. а вот на стандартном мфс работает. Имею в ввиду что сделал прогу которая меняет...

3
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
27.01.2016, 13:26 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
DUMP, Потому что тип не аггрегат, т.к. есть конструктор. MSVC 2013 поддерживает С++11 в котором возможно инициализировать списком инициализации.
2
elch10
38 / 21 / 4
Регистрация: 27.04.2015
Сообщений: 168
Завершенные тесты: 2
27.01.2016, 14:05 #3
Может быть глупый вопрос, а что такое агрегат?
0
Croessmah
Эксперт CЭксперт С++
13430 / 7585 / 857
Регистрация: 27.09.2012
Сообщений: 18,677
Записей в блоге: 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).
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.01.2016, 14:53
Привет! Вот еще темы с ответами:

Не могу понять почему не работает (или правильно не работает) - C++
#include <iostream.h> #include <conio.h> #define N 5 #define M 3 void main() { int a; int i,j; cout<<"nachalnya...

Почему в библиотеке не работает то, что спокойно работает в программе? - C++
День всем добрый! Я здесь решил собрать библиотеку для конструктора игр Game Maker. Хотел поэкспериментировать. Как всегда, у...

Почему в динамическом массиве не работает то, что работает со статическим? - C++
Программа зависает #include<iostream> #include<stdlib.h> #include<time.h> using namespace std; int main() { ...

Почему не работает cin.clear() и как работает sync()? - C++
#include<iostream> #include<cstring> using namespace std; char*input(char*ch,int&n){ cin.getline(ch,20); //cin.sync(); ...


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

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
27.01.2016, 14:53
Ответ Создать тему
Опции темы

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