Проблема в компиляции. Как создать метод в классе по получению структуры ведь не задана структура ExtremumsStr MM[]; . Получается нужно задать другую структуру того же типа во втором классе и передать в нее структуру MM[], но это потребует много ресурсов и замедлит выполнение программы. Что за способ с указателями?
Метод в классе - параметр у него должен быть с типом этой структуры, при вызове метода передавать туда структуру.
С указателями - объявлять так:
ExtremumsStr * MM[];
Потом создавать через new, но по завершению работы программы надо удалять - delete. Но это не значит, что указатель будет видим везде, его так же передават в метод надо будет.
Просто объявите структуру не в классах, а на глобальном уровне и все проблемы решатся.
Там, где требуется массив - можно объявить "обычный" MQL-массив int-значений, а можно объявить объект типа CArrayInt. При этом в последнем случае - имеется возможность передавать в качестве результата или параметра не сам объект, а указатель на него. По аналогии делается класс, в котором вместе массива - ваша структура. После этого - вы можете передавать не саму структуру (которая может быть весьма объемной) - а лишь указатель на объект.
Для начинающих, думаю, неплохая идея с объявлением структур на глобальном уровне.
Там, где требуется массив - можно объявить "обычный" MQL-массив int-значений, а можно объявить объект типа CArrayInt. При этом в последнем случае - имеется возможность передавать в качестве результата или параметра не сам объект, а указатель на него. По аналогии делается класс, в котором вместе массива - ваша структура. После этого - вы можете передавать не саму структуру (которая может быть весьма объемной) - а лишь указатель на объект.
Для начинающих, думаю, неплохая идея с объявлением структур на глобальном уровне.
Это без разницы, все равно массивы передаются по ссылке. Указатели полезны, когда перемещать объекты надо, типа сортировки массив объектов и т.п.
Это без разницы, все равно массивы передаются по ссылке. Указатели полезны, когда перемещать объекты надо, типа сортировки массив объектов и т.п.
На мой взгляд, главное преимущество указателей - их можно запомнить для дальнейшего использования. А массив, переданный по ссылке - никак не запомнишь, только копировать.
Dmitry Fedoseev: new если заранее неизвестно количество объектов, или сортировать их надо, в остальных случаях без new, чтобы не заморачиваться удалением объектов.
Да, согласен. Или если заранее неизвестен конкретный тип объекта из одной иерархии.
Тоже столкнулся с проблемой передачи по ссылке массива структуры во включаемый файл. Помогло это обсуждение. Самый простой вариант, действительно, сделать отдельный включаемый файл с объявлением структур и включить его во все файлы проекта. Так всё работает отлично.
Есть функция в которую нужно передавать одну из 10 структур в зависимости от условия, где в процессе работы будет происходить её заполнение данными. Описание структур выглядет так
struct Acum {datetime time;
double oi;
double dl;
};
Acum DATA_BR[];
Acum DATA_ED[];
Acum DATA_Eu[];
Acum DATA_GAZR[];
Acum DATA_GOLD[];
Acum DATA_LKOH[];
Acum DATA_MGNT[];
Acum DATA_MIX[];
Acum DATA_MXI[];
Acum DATA_ROSN[];
Acum DATA_RTS[];
Acum DATA_SBRF[];
Acum DATA_Si[];
Acum DATA_VTBR[];
Скажите они описаны правильно?
А вот так вызываю функцию где в переменную DataStruc и должна передаватся выбранная струкутра, однако компилятор выдаёт ошибку, не могу понять как это сделать???
Если некоторое имя, которое не было описано ранее, появляется в выражении и за ним следует левая круглая скобка, то оно по контексту считается именем некоторой функции. Аргументы (формальные параметры) передаются по значению, т. е. каждое выражение x1, . . . , xn вычисляется и значение передается функции. Порядок вычисления выражений и порядок...
Проблема в компиляции. Как создать метод в классе по получению структуры ведь не задана структура 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[])