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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
v.a.l.i.d
413 / 378 / 10
Регистрация: 21.09.2012
Сообщений: 913
#1

Инициализация не агрегированных данных списка инициализации не допускается - C++

08.01.2013, 10:03. Просмотров 1708. Ответов 8
Метки нет (Все метки)

Подскажите как исправить эту ошибку

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "stdafx.h"
#include "iostream"
using namespace std;
 
struct Point
{
    double x;
    double y;
};
 
struct Circle : Point
{
    double radius;
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
 
    Circle c = {0.0, 0.0, 10.0};  // error C2552: c: инициализация не агрегированных данных с помощью списка инициализации не допускается
    
    system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2013, 10:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Инициализация не агрегированных данных списка инициализации не допускается (C++):

Возможна ли инициализация в инициализации? - C++
Изучая новый стандарт, заинтересовался: а можно ли как-то сделать массив указателей, например, на тип int, инициализируя ссылочные...

Инициализация (ООП, списки инициализации) - C++
Доброго времени суток, хотелось бы узнать, как происходит процесс инициализации полей класса при использовании списков инициализации. ...

Инициализация в теле конструктора или в списке инициализации. - C++
Здрасте. class random1 { public: random(): a(5) {} private: int a; };

Инициализация в теле конструктора или в списке инициализации, есть ли разница в сгенерированном коде? - C++
Инициализация в теле конструктора или в списке инициализации - большая ли разница в сгенерированном коде? И есть ли она вообще?

Использование инициализатора элемента данных не допускается - C++
Там, где я пытаюсь инициализировать strngNumber выдаёт ошибку "Использование инициализатора элемента данных не допускается" Если пытаюсь...

Избавление от списка инициализации - C++
На днях написал несколько классов с внушительными конструкторами. Наследовавшие от них классы обязаны вызывать эти конструкторы в списках...

8
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
08.01.2013, 10:17 #2
http://msdn.microsoft.com/ru-ru/library/0s6730bb(v=vs.90).aspx

"причины возникновения ошибки C2552 при попытке выполнения агрегатной инициализации для типа:
...
Тип имеет базовый класс."

Как исправить, не знаю, разве что если компилятор поддерживает C++11:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <initializer_list>
 
struct Point
{
    double x;
    double y;
};
 
struct Circle : Point
{
    Circle(const std::initializer_list<double> & lst)
    {
        x       =   *lst.begin();
        y       =   *(lst.begin() + 1);
        radius  =   *(lst.begin() + 2);
    }
    
    double radius;
};
 
int main()
{
    Circle c = {1.0, 3.0, 6.0};
    
    std::cout << std::fixed;
    std::cout << c.x << " " << c.y << " " << c.radius << "\n";
    
    return 0;
}
1
v.a.l.i.d
413 / 378 / 10
Регистрация: 21.09.2012
Сообщений: 913
08.01.2013, 11:13  [ТС] #3
Спасибо Schizorb, я по своему сделал, через конструктор, а в вашем коде не очень понимаю что там происходит )
C++
1
2
3
4
5
6
7
8
9
Circle::Circle(double x_, double y_, double radius_)
    : radius(radius_)
{
    x = x_;
    y = y_;
}
 
 
Circle c(0.0, 0.0, 10.0);
1
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
08.01.2013, 14:02 #4
v.a.l.i.d, да, так попроще будет) но тоже только для C++11...
0
v.a.l.i.d
413 / 378 / 10
Регистрация: 21.09.2012
Сообщений: 913
08.01.2013, 14:10  [ТС] #5
У меня visual studio 2010. он поддерживает c++ 11?
в интернете нашел что программа
C++
1
Circle c = {0.0, 0.0, 10.0};
будет работать если есть c++11. но у меня почему то ошибки
1
Croessmah
Эксперт CЭксперт С++
13510 / 7668 / 866
Регистрация: 27.09.2012
Сообщений: 18,866
Записей в блоге: 3
Завершенные тесты: 1
08.01.2013, 14:16 #6
Цитата Сообщение от Schizorb Посмотреть сообщение
v.a.l.i.d, да, так попроще будет) но тоже только для C++11...
Кто сказал? Здесь обычный конструктор с тремя параметрами
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cstdlib>
using namespace std; 
struct Point
{
    double x;
    double y;
}; 
struct Circle : Point
{
    double radius;
    Circle(double x_, double y_, double radius_):radius(radius_){
        x = x_;
        y = y_;
    }
}; 
int main()
{
    Circle c(0.0, 0.0, 10.0);
    std::cout<<c.radius<<std::endl;
    system("pause");
    return 0;
}
Инициализация не агрегированных данных списка инициализации не допускается
1
Croessmah
Эксперт CЭксперт С++
13510 / 7668 / 866
Регистрация: 27.09.2012
Сообщений: 18,866
Записей в блоге: 3
Завершенные тесты: 1
08.01.2013, 14:17 #7
Цитата Сообщение от v.a.l.i.d Посмотреть сообщение
У меня visual studio 2010. он поддерживает c++ 11?
Если мне не изменяет память, то там нет поддержки C++11. Хотя может есть что-то из tr1. Точно не помню
1
Schizorb
08.01.2013, 14:20
  #8

Не по теме:

Croessmah, туплю, не заметил что там скобки обычные, не фигурные...

0
Jupiter
08.01.2013, 14:25     Инициализация не агрегированных данных списка инициализации не допускается
  #9

Не по теме:

Цитата Сообщение от v.a.i.d Посмотреть сообщение
У меня visual studio 2010. он поддерживает c++ 11?
а погуглить?
http://blogs.msdn.com/b/vcblog/archi...the-table.aspx
http://wiki.apache.org/stdcxx/C++0xCompilerSupport

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2013, 14:25
Привет! Вот еще темы с ответами:

Принцип работы списка инициализации членов класса - C++
Доброго дня! Интересует принцип работы списка инициализации членов класса. Предположим, есть следующее описание класса: class A...

Метод STL size и инициализация списка - C++
Всем доброго вечера! Вот код#include &lt;fstream&gt; // для потоковых файловых функций #include &lt;typeinfo&gt; // для typeid() using namespace...

Получение агрегированных данных с группировкой по какому-либо признаку из одной таблицы - MS Access
Собственно вопрос в заголовке. Я не понимаю как запихнуть в такой запрос группировку. PS: База сугубо учебная для тренировок

Компактная инициализация списка списков - C#
Чтобы составить двумерный несимметричный массив из заранее известных объектов, делаю так: //основной список List&lt;MyObject&gt; list =...


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

Или воспользуйтесь поиском по форуму:
9
08.01.2013, 14:25
Ответ Создать тему
Опции темы

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