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

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

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

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

10.07.2015, 10:34. Просмотров 716. Ответов 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():
//для инициализации массива требуются фигурные скобки
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2015, 10:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему не компилируется list.push_back( double[3] ) ? (C++):

list.push_back ошибка! - C++
Только начинаю писать на C++. Помогите пожалуйста разобраться в ламерской ошибке! В классе инициализирую list&lt;CProgressCtrl&gt;. Затем в...

Про list push_back - C++
list &lt;int&gt; temp; temp.push_back(3); temp.push_back(2); temp.push_back(1); list &lt;int&gt;::iterator iter = temp.begin(); for(int...

Почему мы пишем double x (double y)? а не через запятую double x,y - C++
почему мы пишем double x (double y)? а не через запятую double x,y

Почему перестает работать программа при замене double на long double? - C++
Здравствуйте! Прошу помощи чтобы разобраться в следующем вопросе: Нашел программу в интернете, запустил - все работает, но когда решил...

Почему возможно задать массив с размером -1 (почему такое вообще компилируется)? - C++
Всем привет. Долгое время не писал на плюсах, решил пройтись по основам, вспомнить. По непонятным для меня причинам этот код...

Ошибки error C2296: -: недопустимо, левый операнд имеет тип "double (__cdecl *)(double,double,double - C++
Думаю из-за polp #include&lt;iostream&gt; #include&lt;cmath&gt; #include&lt;cstdlib&gt; using namespace std; double polp(double af,double...

21
Fulcrum_013
699 / 764 / 74
Регистрация: 14.12.2014
Сообщений: 6,036
Завершенные тесты: 3
10.07.2015, 17:29 #16
Цитата Сообщение от Voivoid Посмотреть сообщение
О, ну тогда что же это? константный указатель присвается неконстантному указателю?
Да. Точно так же как значение константы присваивается переменной.
0
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
10.07.2015, 17:35 #17
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Да. Точно так же как значение константы присваивается переменной.
Кхм, э-э-э, ну ок, допустим. Почему тогда здесь ошибка компиляции-то?

http://ideone.com/eWKQUE
0
lss
921 / 850 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
10.07.2015, 17:39 #18
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
в С++ любой массив это указатель.
Массив - это массив: непрерывный именованный участок памяти, содержащий данные одного типа; имя массива (non-modifiable) lvalue, в некоторых случаях ,может быть раложено (decay) к rvalue: "указателю на первый элемент массива" (что, в частности, происходит в формальных параметрах функций).
Указатель - переменная, содержащая адрес.
0
Fulcrum_013
699 / 764 / 74
Регистрация: 14.12.2014
Сообщений: 6,036
Завершенные тесты: 3
10.07.2015, 17:45 #19
Цитата Сообщение от Voivoid Посмотреть сообщение
Кхм, э-э-э, ну ок, допустим. Почему тогда здесь ошибка компиляции-то?
Просит явно привести тип
0
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
10.07.2015, 17:54 #20
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Просит явно привести тип
Ну так почему же в одном случае ошибка, а в другом - нет?
0
DrOffset
7376 / 4453 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
10.07.2015, 18:01 #21
Цитата Сообщение от Voivoid Посмотреть сообщение
Почему тогда здесь ошибка компиляции-то?
Справедливости ради, в массиве сам адрес начала неизменен, а не его элементы. Поэтому правильнее так:
http://ideone.com/qoW0fC

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

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

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

Первоначальный пример 1 в 1: http://ideone.com/AHTv2p
0
VIKT0R
9 / 9 / 2
Регистрация: 15.11.2011
Сообщений: 97
11.07.2015, 14:38  [ТС] #22
Цитата Сообщение от Voivoid Посмотреть сообщение
Да дело даже не в стиле, а в том, что в C++ нельзя массивы передавать по значению.
Ну, в общем, действительно, массивов double[3] (точек) в программе много, так что передавать их туда-сюда по значению было бы неморально, поэтому сделал в итоге list<double*>. Спасибо всем!
0
11.07.2015, 14:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2015, 14:38
Привет! Вот еще темы с ответами:

Template double linked list C++ - C++
Пытался реализовать шаблон класса двусвязный список, элементарами которого является класс структура. 1. Как теперь инициализировать класс...

Не компилируется почему-то - C++
Вот код программы, она вроде как бы работает, но все равно выдаются ошибки, помогите пожалуйста их исправить, в c++ я новичок: ...

Почему не компилируется? - C++
Привет, перейду сразу к делу. Вот все говорят, что Visual Studio самая крутая студия, а она даже не может скомпилировать эту простую...

Почему не компилируется - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; const double Pi = 3.14159; double Area(double...


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

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

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