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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
08.01.2013, 10:03     Инициализация не агрегированных данных списка инициализации не допускается #1
Подскажите как исправить эту ошибку

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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2013, 10:03     Инициализация не агрегированных данных списка инициализации не допускается
Посмотрите здесь:

Инициализация данных объекта. C++
Почему при инициализации данных программа работает быстрей? C++
C++ )Вывести квадрат,состоящий из N x N клеток, заполненных числами от до N^2 по спирали(2<=N<=100).Не допускается начинать спираль в ином,кроме верхнего
C++ Метод STL size и инициализация списка
Допускается ли в С + + следующий фрагмент программы? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
08.01.2013, 10:17     Инициализация не агрегированных данных списка инициализации не допускается #2
http://msdn.microsoft.com/ru-ru/libr...(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;
}
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 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);
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
08.01.2013, 14:02     Инициализация не агрегированных данных списка инициализации не допускается #4
v.a.l.i.d, да, так попроще будет) но тоже только для C++11...
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 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. но у меня почему то ошибки
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 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;
}
Инициализация не агрегированных данных списка инициализации не допускается
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
08.01.2013, 14:17     Инициализация не агрегированных данных списка инициализации не допускается #7
Цитата Сообщение от v.a.l.i.d Посмотреть сообщение
У меня visual studio 2010. он поддерживает c++ 11?
Если мне не изменяет память, то там нет поддержки C++11. Хотя может есть что-то из tr1. Точно не помню
Schizorb
08.01.2013, 14:20
  #8

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2013, 14:25     Инициализация не агрегированных данных списка инициализации не допускается
Еще ссылки по теме:

C++ Инициализация в теле конструктора или в списке инициализации.
C++ Допускается ли такое использование лямбды
Чистый спецификатор =0 допускается использовать только для виртуальных функций C++

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

Или воспользуйтесь поиском по форуму:
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

Yandex
Объявления
08.01.2013, 14:25     Инициализация не агрегированных данных списка инициализации не допускается
Ответ Создать тему
Опции темы

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