Справка по языку MQL5 - страница 47

 
nen >>:

Это о другом. Имеется в виду не графический объект, а объект языка.

Если мы создаем экземпляр объекта с помощью ArrayResize, то что будет с объектами, содержащими динамические массивы?

Мне интересно, где хранятся данные динамических массивов, включенных в объект в качестве члена класса.

--------

Некоторые вопросы Вы найдете в разделах "Справочник MQL5 — Основы языка — Типы данных — Объект динамического массива " и "Справочник MQL5 — Основы языка — Типы данных — Структуры и классы ".


Динамические массивы

Динамический массив представляет из себя структуру размером 40 байт. Допускается объявление не более чем 4-мерного массива.

struct MqlArrayObject
{
ushort type; // закодированный тип данных
ushort flags; // флаги,определяющие статус массива
uint item_len; // размер одного элемента массива в байтах
int allocated; // фактический размер, распределенный для массива
int range0; // размер первого измерения (изначально равно 0)
int range1; // размер второго измерения, если есть. Иначе 0
int range2; // размер третьего измерения, если есть. Иначе 0
int range3; // размер четвертого измерения, если есть. Иначе 0
int reserved0; // данные для
int reserved1; // внутреннего
int reserved2; // использования
};

При объявлении динамического массива (массива с неуказанным значением в первой паре квадратных скобок) компилятор автоматически создает переменную указанной выше структуры (объект динамического массива) и обеспечивает код для правильной инициализации.

 

Это я читал.

Имеем массив объектов. В объектах имеются члены класса, являющиеся динамическими массивами.

Создаем объект с помощью ArrayResize, как об этом сказано в Справке.

Под данный объект выделяется определенная память.

Начинаем заполнять динамический массив данными. Его размер увеличивается.

Если под динамический массив выделена память внутри тела объекта, то при увеличении размера динамического массива необходимо и увеличивать память под объект. Но так как объект является сам элементом массива, то размер памяти под него ограничен. Что произойдет при увеличении динамического массива, являющегося членом класса, к которому принадлежит объект, уже являющийся элементом массива?

------------

Объекты этого класса необходимо поместить в массив.

Привожу маленький кусочек кода.

Заранее неизвестно, сколько таких объектов будет, поэтому и приходится помещать их в массив.

Точнее, методы этого объекта будут создавать неизвестное количество объектов другого класса но также с динамическими массивами в качестве членов.

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

class cHistory
{
private:
// динамические массивы таймсерий 

double gHA[]; // динамический массив максимумов баров
...

public:
void cHistory() {gInit=false; gHistorySwapping=false; gNumber=0;} // Конструктор класса
void LoadHistory(); // загрузка истории
...

};
 
nen писал(а) >>

Это я читал.

Имеем массив объектов. В объектах имеются члены класса, являющиеся динамическими массивами.

Создаем объект с помощью ArrayResize, как об этом сказано в Справке.

Под данный объект выделяется определенная память.

Начинаем заполнять динамический массив данными. Его размер увеличивается.

Если под динамический массив выделена память внутри тела объекта, то при увеличении размера динамического массива необходимо и увеличивать память под объект. Но так как объект является сам элементом массива, то размер памяти под него ограничен. Что произойдет при увеличении динамического массива, являющегося членом класса, к которому принадлежит объект, уже являющийся элементом массива?

------------

Объекты этого класса необходимо поместить в массив.

Привожу маленький кусочек кода.

Заранее неизвестно, сколько таких объектов будет, поэтому и приходится помещать их в массив.

Точнее, методы этого объекта будут создавать неизвестное количество объектов другого класса но также с динамическими массивами в качестве членов.

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

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

Поэтому размер объекта, содержащего динамический(е) массив(ы), постоянен.

 

Спасибо.

 

EventChartCustom

Генерирует пользовательское событие для указанного графика.

......

Параметры

chart_id

[in] Идентификатор графика. 0 означает текущий график.

......

Примечание

Эксперт, прикрепленный к указанному графику, обрабатывает данное событие при помощи функции OnChartEvent(int event_id, long& lparam, double& dparam, string& sparam);

------------------------------------

Параметр chart_id может задать, на каком графике событие отслеживается. То есть мы можем задать любой график любого торгового инструмента.

В Примечании говорится, что эксперт прикреплен к указанному графику.

Что означают слова к указанному графику в Примечании?

Допустим, эксперт прикреплен к eurusd, а мы для EventChartCustom задали через chart_id график gbpusd. Из примечания следует, что эксперт будет обрабатывать события с графика eurusd. А хотелось бы с gbpusd.

Разъясните, пожалуйста, будет ли эксперт обрабатывать события с графика gbpusd. Он же не прикреплен к этому графику.

И исправьте формулировки в Справке. Иначе возникают такие вопросы.

 

nen писал(а) >>

Что означают слова к указанному графику?

К тому графику, идентификатор которого задан в параметрах события, видимо.
 

Я тоже так думаю. Но...

Хотелось бы от разработчиков получить четкий ответ. И в Справке исправить двусмысленность.

 
nen >>:
Хотелось бы от разработчиков получить четкий ответ. И в Справке исправить двусмысленности.

Так в багтрекер напишите.

 

TimeCurrent

Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов.

--------------

А можно увидеть пример. Допустим мы прикрепили эксперт к графику eurusd. С этим графиков все понятно. Но раз в формулировке говорится по одному из выбранных в "Обзоре рынка" символов, то хотелось бы получить время прихода последней котировки по gbpusd. При этом эксперт находится на графике eurusd.

-------------

Или же более четкую формулировку в Справке сделайте. Не по одному из, а по тому, к графику которого прикреплен эксперт.

 
Rosh писал(а) >>
Выкладываем начальный вариант справки по новому языку MQL5 в виде CHM-файла. Язык MQL5 является встроенным языком программирования для нового клиентского терминала MetaTrader 5. Документация практически готова, за исключением описания основных торговых функций.

Здравствуйте,

Я новичок в программировании MQL4 и получили документацию:

mql5_russian.chm на: https://forum.mql4.com/11730

Я хочу попросить у вас разрешения на перевод документа на французском языке и левая для свободного скачивания на моем личном сайте, который обсуждается MTA4.

Это не кажется, что перевод на французский язык является одной из целей https://www.mql4.com или http://www.metaquotes.net/

Можете ли вы дать мне разрешение на перевод этого документа, пожалуйста?

Искренне Rinna МАКСИМ

Причина обращения: