Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Проблема в компиляции. Как создать метод в классе по получению структуры ведь не задана структура ExtremumsStr MM[]; . Получается нужно задать другую структуру того же типа во втором классе и передать в нее структуру MM[], но это потребует много ресурсов и замедлит выполнение программы. Что за способ с указателями?
Метод в классе - параметр у него должен быть с типом этой структуры, при вызове метода передавать туда структуру.
С указателями - объявлять так:
ExtremumsStr * MM[];
Потом создавать через new, но по завершению работы программы надо удалять - delete. Но это не значит, что указатель будет видим везде, его так же передават в метод надо будет.
Просто объявите структуру не в классах, а на глобальном уровне и все проблемы решатся.
Что за способ с указателями?
Посмотрите как устроены классы массивов (типа CArrayInt) в Стандартной Библиотеке.
Там, где требуется массив - можно объявить "обычный" MQL-массив int-значений, а можно объявить объект типа CArrayInt. При этом в последнем случае - имеется возможность передавать в качестве результата или параметра не сам объект, а указатель на него. По аналогии делается класс, в котором вместе массива - ваша структура. После этого - вы можете передавать не саму структуру (которая может быть весьма объемной) - а лишь указатель на объект.
Для начинающих, думаю, неплохая идея с объявлением структур на глобальном уровне.
Посмотрите как устроены классы массивов (типа CArrayInt) в Стандартной Библиотеке.
Там, где требуется массив - можно объявить "обычный" MQL-массив int-значений, а можно объявить объект типа CArrayInt. При этом в последнем случае - имеется возможность передавать в качестве результата или параметра не сам объект, а указатель на него. По аналогии делается класс, в котором вместе массива - ваша структура. После этого - вы можете передавать не саму структуру (которая может быть весьма объемной) - а лишь указатель на объект.
Для начинающих, думаю, неплохая идея с объявлением структур на глобальном уровне.
Это без разницы, все равно массивы передаются по ссылке. Указатели полезны, когда перемещать объекты надо, типа сортировки массив объектов и т.п.
С указателями - объявлять так:
Не обязательно объявлять по new, можно просто объявить в виде:
СExtremumsStr objMM; // СExtremumsStr - класс, в который "обернут" массив MM; objMM - объявление объекта этого класса
СExtremumsStr * pMM = GetPointer(objMM); // Объявляем указатель pMM и "указываем" его на объявленный выше объект.
Только надо помнить, что в момент удаления объекта - указатель становится невалидным, им можно пользоваться только пока сам объект существует.
Это без разницы, все равно массивы передаются по ссылке. Указатели полезны, когда перемещать объекты надо, типа сортировки массив объектов и т.п.
new если заранее неизвестно количество объектов, или сортировать их надо, в остальных случаях без new, чтобы не заморачиваться удалением объектов.
Коллеги помогите чайнику.
Есть функция в которую нужно передавать одну из 10 структур в зависимости от условия, где в процессе работы будет происходить её заполнение данными. Описание структур выглядет так
Скажите они описаны правильно?
А вот так вызываю функцию где в переменную DataStruc и должна передаватся выбранная струкутра, однако компилятор выдаёт ошибку, не могу понять как это сделать???
bool Load_File(string Name_File, struct &DataStruc[])