Array out of range

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Anton
89
Anton  

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

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
Slava
Модератор
13448
Slava  

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

demo d=new demo();

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

либо demo *d=new demo;

Разберёмся 

 

 

Anton
89
Anton  
stringo:

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

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

либо demo *d=new demo;

Разберёмся 

 

 

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

 

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

Anton
89
Anton  
Спасибо, разобрался сам.
Ilyas
1442
Ilyas  

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

Anton
89
Anton  

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

Выражение

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

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

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

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

Выражение

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

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

Anton
89
Anton  
mql5:

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

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

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

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

Yedelkin
4193
Yedelkin  
fellow:

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

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

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

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