Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
MqlRates mrate[];//массив нулевого размера
ArrayResize и ArrayInitialize используйте. непонятно, правда для чего.
обычно с CopyRates эта структура используется.
Renat говорил, что лучше делать вот так:
Попробуем разобраться. Насколько я помню, Ренат говорил про инициализацию простой переменной, а не массива. С боями подобные примеры появились в Справочнике:
У Вас же предпринимается попытка проинициализировать при объявлении массив, а не простую переменную. На этот счёт нашёл в Справочнике вот такой пример:
Здесь массив инициализируется конечным числом значений, и, судя по пояснению, компилятор определяет размер такого массива исходя именно из количества этих значений. Проверять лень - скорее всего, размер массива f[] из примера будет равен 6.
В Вашем примере размер инициализирующей последовательности {0} равен 1. Соответственно, компилятор, скорее всего, и определяет размер массива mrate[] как 1. Вот, ради интереса, укажите так:
Будет выдавать ошибку?Я перепутал. Swan четко объяснил. Я взял не ту структуру. Ее вообще не нужно инициализировать, т.к. она принимает значения. Нужно инициализировать те, которые отдают свои значения. Я был не прав.
Ну, главное разобрались. Сам по себе вопрос про Рената оказался интересным, так что и я кое в чём разобрался.
double f[] = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 }; не динамический массив.
double f[] = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 }; нединамический массив.
double f[] - сам по себе динамический массив. Именно он объявляется при создании. Перестаёт ли он быть динамическим после инициализации конечной инициализирующей последовательностью - не исследовал. Главное, что выяснили выше, - это то, что после инициализации объявленный массив обретает конкретный размер.
Вы хотите сказать, что динамический массив в результате явной инициализации перестаёт быть динамическим, т.е. теряет статус и свойства динамического? - Может, и так. Но сомневаюсь. Вопрос: на каком основании (почему) динамический массив double f[] перестаёт быть оным?
double f[] - сам по себе динамический массив. Именно он объявляется при создании. Перестаёт ли он быть динамическим после инициализации конечной инициализирующей последовательностью - не исследовал. Главное, что выяснили выше, - это то, что после инициализации объявленный массив обретает конкретный размер.
Вы хотите сказать, что динамический массив в результате явной инициализации перестаёт быть динамическим, т.е. теряет статус и свойства динамического? - Может, и так. Тогда вопрос: почему?
Все дело в том что мы в МКЛ немного "изолированы" от реальных дел )), за нас в такой ситуации решает компилятор. Если видит:
создает статический масив (без возможности изменять размер). Если видит:
double f[];
создает структуру struct MqlArrayObject (она и ведет себя как динамический массив), в глобальной памяти. Поэтому нельзя инициализировать массив после объявления ( double f[]; f = {6};)
P.S: все написанное мое ИМХО, могу где-то ошибаться.
Вопрос от чайника: действительно ли, что если компилятор видит строчку
то изначально создаётся не динамический, а статический массив?
Есть же правило: "При объявлении динамического массива (массива с неуказанным значением в первой паре квадратных скобок) компилятор автоматически создает переменную структуры struct MqlArrayObject (объект динамического массива) и обеспечивает код для правильной инициализации". Или наличие конечной инициализирующей последовательности приравнивается к "явному указанию всех значимых размерностей массива" и приводит к созданию статического массива?
Вопрос от чайника: действительно ли, что если компилятор видит строчку
то изначально создаётся не динамический, а статический массив?
Есть же правило: "При объявлении динамического массива (массива с неуказанным значением в первой паре квадратных скобок) компилятор автоматически создает переменную структуры struct MqlArrayObject (объект динамического массива) и обеспечивает код для правильной инициализации". Или наличие конечной инициализирующей последовательности приравнивается к "явному указанию всех значимых размерностей массива" и приводит к созданию статического массива?
А слабо проверить?
;)
А слабо проверить?
;)
На текущий момент слабо. До терминала доберусь только вечером. В противном случае мой ответ для 220Volt звучал бы по-другому, как Вы понимаете :) В Справочнике информацию не нашёл. Может, плохо искал, но дотошно.
Ладно, отмазался. :) Я тоже вне терминала.
Проверяется элементарно - попыткой использования ArrayResize(...)