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

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

Войти
Регистрация
Восстановить пароль
 
 
VIKT0R
8 / 8 / 2
Регистрация: 15.11.2011
Сообщений: 85
#1

Почему не компилируется list.push_back( double[3] ) ? - C++

10.07.2015, 10:34. Просмотров 658. Ответов 21
Метки нет (Все метки)

А почему компилятор отказывается добавлять в список массив?

C++
1
2
3
4
5
6
std::list<double[3]>    lst;   // у компилятора нет замечаний
 
double  arr[3] = { 0 };
 
lst.push_back( arr );   //  а здесь выдает error C2075: Target of operator new():
//для инициализации массива требуются фигурные скобки
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Fulcrum_013
663 / 731 / 72
Регистрация: 14.12.2014
Сообщений: 5,699
Завершенные тесты: 3
10.07.2015, 17:29     Почему не компилируется list.push_back( double[3] ) ? #16
Цитата Сообщение от Voivoid Посмотреть сообщение
О, ну тогда что же это? константный указатель присвается неконстантному указателю?
Да. Точно так же как значение константы присваивается переменной.
Voivoid
674 / 277 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
10.07.2015, 17:35     Почему не компилируется list.push_back( double[3] ) ? #17
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Да. Точно так же как значение константы присваивается переменной.
Кхм, э-э-э, ну ок, допустим. Почему тогда здесь ошибка компиляции-то?

http://ideone.com/eWKQUE
lss
921 / 851 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
10.07.2015, 17:39     Почему не компилируется list.push_back( double[3] ) ? #18
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
в С++ любой массив это указатель.
Массив - это массив: непрерывный именованный участок памяти, содержащий данные одного типа; имя массива (non-modifiable) lvalue, в некоторых случаях ,может быть раложено (decay) к rvalue: "указателю на первый элемент массива" (что, в частности, происходит в формальных параметрах функций).
Указатель - переменная, содержащая адрес.
Fulcrum_013
663 / 731 / 72
Регистрация: 14.12.2014
Сообщений: 5,699
Завершенные тесты: 3
10.07.2015, 17:45     Почему не компилируется list.push_back( double[3] ) ? #19
Цитата Сообщение от Voivoid Посмотреть сообщение
Кхм, э-э-э, ну ок, допустим. Почему тогда здесь ошибка компиляции-то?
Просит явно привести тип
Voivoid
674 / 277 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
10.07.2015, 17:54     Почему не компилируется list.push_back( double[3] ) ? #20
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Просит явно привести тип
Ну так почему же в одном случае ошибка, а в другом - нет?
DrOffset
7060 / 4201 / 949
Регистрация: 30.01.2014
Сообщений: 6,968
10.07.2015, 18:01     Почему не компилируется list.push_back( double[3] ) ? #21
Цитата Сообщение от Voivoid Посмотреть сообщение
Почему тогда здесь ошибка компиляции-то?
Справедливости ради, в массиве сам адрес начала неизменен, а не его элементы. Поэтому правильнее так:
http://ideone.com/qoW0fC

Это, отнюдь, не означает, что я хочу ввязываться в ваш спор.

Но на твоем месте я бы апеллировал к типизации с точки зрения языка, а не к ошибкам компиляции.
Однако я не был бы на твоем месте, т.к. считаю, что вы оба правы, просто с разных позиций.

Добавлено через 2 минуты
Прошу прощения, не та ссылка. Исправил на верную

Первоначальный пример 1 в 1: http://ideone.com/AHTv2p
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2015, 14:38     Почему не компилируется list.push_back( double[3] ) ?
Еще ссылки по теме:
C++ Не компилируется почему-то
Почему не компилируется C++
C++ почему не компилируется ?
Почему не компилируется? C++
Почему не компилируется код C++

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

Или воспользуйтесь поиском по форуму:
VIKT0R
8 / 8 / 2
Регистрация: 15.11.2011
Сообщений: 85
11.07.2015, 14:38  [ТС]     Почему не компилируется list.push_back( double[3] ) ? #22
Цитата Сообщение от Voivoid Посмотреть сообщение
Да дело даже не в стиле, а в том, что в C++ нельзя массивы передавать по значению.
Ну, в общем, действительно, массивов double[3] (точек) в программе много, так что передавать их туда-сюда по значению было бы неморально, поэтому сделал в итоге list<double*>. Спасибо всем!
Yandex
Объявления
11.07.2015, 14:38     Почему не компилируется list.push_back( double[3] ) ?
Ответ Создать тему
Опции темы

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