АвторСообщение



Пост N: 8
Зарегистрирован: 23.08.10
ссылка на сообщение  Отправлено: 21.11.11 13:12. Заголовок: Объявление массива


Сергей, добрый день.

Пожалуйста, подскажите, почему при объявлении массива и указания размерности через переменные, выдаются ошибки:
'a' - integer number expected
'd' - variable already defined
']' - comma or semicolon expected
'massiv' - variable not defined

Массив создаетяся в скрипте следующим образом:
int a=12;
int d=12;
double massiv[a,d];

С уважением, Алексей.



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 3 [только новые]


постоянный участник


Пост N: 243
Зарегистрирован: 03.09.09
ссылка на сообщение  Отправлено: 21.11.11 13:47. Заголовок: При объявлении масси..


При объявлении массива для указания его размерностей нельзя использовать переменные, т.к. размер массива должен быть вычислен на этапе компиляции программы. Значения переменных (a и b, несмотря на то, что они содержат константу, являются переменными) могут быть вычислены только во время исполнения программы. Если до исполнения программы размер массива вы установить не можете, то используйте другой подход:


 цитата:

double massiv[][12]; // Объявление безразмерного массива. До указания размерности использовать нельзя
int a = 12;
ArrayResize(massiv, a); // Определение размера массива. Теперь его можно использовать



Изменять размерность массива можно только в первом его измерении. Поэтому, если массив многомерный, второе и последующие измерения должны быть заданы явно константным значением.

Спасибо: 0 
ПрофильЦитата Ответить
Автор




Пост N: 927
Зарегистрирован: 21.05.06
Откуда: Украина, Днепропетровск
ссылка на сообщение  Отправлено: 21.11.11 14:03. Заголовок: К сожалению, в MQL 4..


К сожалению, в MQL 4 так делать нельзя.

Массив должен быть объявлен жёстко, т.е. размер массива задаётся целочисленными константами. Например:
double mass[5,10];

В принципе, в каком-то другом языке может быть разрешение задавать размеры массивов переменными, как это пытались сделать Вы. С точки зрения здравого смысла оба подхода имеют право на жизнь.

Но в данном случае мы имеем дело с конкретным языком MQL 4, в который разработчики заложили такое правило. Просто нужно это правило знать и учитывать при построении кода.
---

Примите также к сведению, что любые массивы в программе инициализируются один раз. Для изменения размера массива нужно использовать функцию ArrayResize(). Ещё одной важной особенностью массивов является то, что все массивы являются статическими, т.е. сохраняют свои значения после выхода из функции, в которой они были объявлены. При следующем обращении к этой функции массив не инициализируется, а значения элементов массива имеют те значения, что были достигнуты при последнем их изменении.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 9
Зарегистрирован: 23.08.10
ссылка на сообщение  Отправлено: 21.11.11 15:07. Заголовок: спасибо...


спасибо.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 0
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет