Array out of range

 

Столкнулся с такой проблемой. При запуске скрипта терминал выдает ошибку о размерности массива. Код приложен ниже.

class demo{
private:
   int i;
   int arr[];
public:
   demo();
   void test(int value);
};

demo::demo(){i=0; ArrayResize(arr,10);}

demo::test(int value){
   arr[i]=value; // <-- Ошибку выдает в этой строчке.
   i++;
}
demo d=new demo();
d.test(5);

Однако если вместо arr[i] скажем написать arr[0], то ошибки больше нет.

Что посоветуете уважаемые программисты?

Документация по MQL5: Операции с массивами / ArrayRange
Документация по MQL5: Операции с массивами / ArrayRange
  • www.mql5.com
Операции с массивами / ArrayRange - Документация по MQL5
 

Компилятор не должен был пропустить строку

demo d=new demo();

либо просто demo d;

либо demo *d=new demo;

Разберёмся 

 

 

 
stringo:

Компилятор не должен был пропустить строку

либо просто demo d;

либо demo *d=new demo;

Разберёмся 

 

 

Самое интересное что я первый свой класc на MQL5 пытался сначала описать именно как demo d; на что компилятор ругнулся. Тогда я по накатанной уже пробовал demo *d=new demo; Но и здесь он ругнулся. В итоге мы с ним сошлись на demo d=new demo(); что меня очень удивило.

 

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

 
Спасибо, разобрался сам.
 

Спасибо за сообщение. Исправлено. Ждите обновления

 

В методе Resize класса CArrayDouble можно упростить вычисления.

Выражение

new_size=m_step_resize*(1+(size-Available())/m_step_resize);

элементарным преобразованием сводится к 

new_size=m_step_resize+size-Available();
 
antonix:

В методе Resize класса CArrayDouble можно упростить вычисления.

Выражение

элементарным преобразованием сводится к 

это не поддаётся элементарной математике - используется особенность целочисленного деления

 
mql5:

это не поддаётся элементарной математике - используется особенность целочисленного деления

Точно, я совсем не учел деление без остатка.
 

Не плохо было бы знать как прочитать содержимое переменных причиняющих такие ошибки (array out of range)?

OnDeinit при такой ошибке не вызывается ...

 
fellow:

Не плохо было бы знать как прочитать содержимое переменных причиняющих такие ошибки (array out of range)?

OnDeinit при такой ошибке не вызывается ...

 Может, не совсем понял суть вопроса, но раньше при указании ошибки "array out of range" указывалось местоположение элемента (массива) вызывавшего ошибку. А там уж: хочешь - читай содержимое массива, хочешь - делай выводы без чтения.

 
необходимо узнать на каком значении индекса массива произошёл сбой
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
Причина обращения: