Подскажите, пожалуйста, правильно ли я понимаю, что массивы структур по умолчанию не инициализируются?
И подразумевается, что для инициализации необходимо пройтись циклом по всем элементам массива вызывая, определённую при определении структуры функцию инициализации?
Инициализируются, если в структуре имеется конструктор.
struct SampleStruct { int a; SampleStruct() { a = 100; Print(__FUNCTION__); } }; void OnStart() { SampleStruct array[10]; }
Результат:
2016.05.23 12:11:26.558 Test NZDUSD,H1: uninit reason 0 2016.05.23 12:11:26.558 Test NZDUSD,H1: SampleStruct::SampleStruct 2016.05.23 12:11:26.558 Test NZDUSD,H1: SampleStruct::SampleStruct 2016.05.23 12:11:26.558 Test NZDUSD,H1: SampleStruct::SampleStruct 2016.05.23 12:11:26.558 Test NZDUSD,H1: SampleStruct::SampleStruct 2016.05.23 12:11:26.558 Test NZDUSD,H1: SampleStruct::SampleStruct 2016.05.23 12:11:26.558 Test NZDUSD,H1: SampleStruct::SampleStruct 2016.05.23 12:11:26.558 Test NZDUSD,H1: SampleStruct::SampleStruct 2016.05.23 12:11:26.558 Test NZDUSD,H1: SampleStruct::SampleStruct 2016.05.23 12:11:26.558 Test NZDUSD,H1: SampleStruct::SampleStruct 2016.05.23 12:11:26.558 Test NZDUSD,H1: SampleStruct::SampleStruct 2016.05.23 12:11:26.558 Test NZDUSD,H1: initialized
Инициализируются, если в структуре имеется конструктор.
Результат:
Спасибо за пример!
А в других случаях: если
1. массив объявляется глобально?
2. статически?
3. как свойство класса?
Сами по себе структуры не инициализируются. И массивы структур тоже не инициализируются. Если нужна просто чистая структура я обычно делаю так:
MqlTradeRequest mtr = {0}; MqlDateTime mdta[] = {0};
Мне кажется пример Ihor будет работать во всех трёх случаях, а мой только в первых двух.
Сами по себе структуры не инициализируются. И массивы структур тоже не инициализируются. Если нужна просто чистая структура я обычно делаю так:
Мне кажется пример Ihor будет работать во всех трёх случаях, а мой только в первых двух.
Спасибо за пример!
А в других случаях: если
1. массив объявляется глобально?
2. статически?
Аналогичным образом.
3. как свойство класса?
Спасибо! Кажется с начальной инициализацией стало всё понятно.
Но вот у меня есть вложенные циклы: во внешнем массив структур должен каждый раз инициализироваться, а во внутреннем модифицироваться начиная с исходного значения после инициализации.
Как-то возможно принудительно инициализировать массив структур, являющийся свойством класса?
Спасибо! Кажется с начальной инициализацией стало всё понятно.
Но вот у меня есть вложенные циклы: во внешнем массив структур должен каждый раз инициализироваться, а во внутреннем модифицироваться начиная с исходного значения после инициализации.
Как-то возможно принудительно инициализировать массив структур, являющийся свойством класса?
Способов много. Можно сделать специальный метод класса, который выполняет эту задачу. Если же инициализация уже проходит в цикле, то видоизменяем структуру следующим образом:
struct SampleStruct { int a; SampleStruct() { Init(); } void Init() { a = 100; Print(__FUNCTION__); } };
А в цикле просто:
for (int i = 0; i < 10; i++) array[i].Init();
Способов много. Можно сделать специальный метод класса, который выполняет эту задачу. Если же инициализация уже проходит в цикле, то видоизменяем структуру следующим образом:
А в цикле просто:
Замечательный пример!
Я был уверен, что функция не может быть элементом структуры, а оказывается может!
Спасибо!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Подскажите, пожалуйста, правильно ли я понимаю, что массивы структур по умолчанию не инициализируются?
И подразумевается, что для инициализации необходимо пройтись циклом по всем элементам массива вызывая, определённую при определении структуры функцию инициализации?