class ZZHandling { private: //---- Конструктор и деструктор struct SZZProperty { int barIndex; double price; }; public: ZZHandling(); ~ZZHandling(); //------------------------------------ Функции для выполнения операций с данными Zig-Zag'a ---------------------------------------- SZZProperty ZZProperty; };
Использую подобную конструкцию, но по большому счету смысла нет. В другом классе с подобным именем структуру не создадите, будет ругаться. Как минимум нужно будет что-то добавить, например SZZProperty_.
Использую подобную конструкцию, но по большому счету смысла нет.В другом классе с подобным именем структуру не создадите, будет ругаться. Как минимум нужно будет что-то добавить, например SZZProperty_.
Суть понял. В каких-то ситуациях это не вариант. Но в данном случае, всё данные зиг-зага я буду всё-равно хранить в этом классе, поэтому это вариант))
Оказалось, не всё так радужно, как я думал. Не всё работает корректно. Начал писать класс.
//+=======================================================================================================================================+ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //| КЛАСС, ХРАНЯЩИЙ И ОБРАБАТЫВАЮЩИЙ ДАННЫЕ Zig-Zag'a | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+=======================================================================================================================================+ class ZZHandling { private: //---- Конструктор и деструктор public: ZZHandling(); ~ZZHandling(); //------------------------------------ Функции для выполнения операций с данными Zig-Zag'a ---------------------------------------- struct ZZProperty { int indexInZZSequence; // Индекс бара из таймсерии iBars, на котором образован экстремум double price; // Цена Zig-Zag'a на индексе barIndex void setData(int pZZIndex, double pPrice) { indexInZZSequence = pZZIndex; price = pPrice; Print("setData"); } }; }; //========================================================================================================================================= // Конструктор класса. ==================================================================================================================== ZZHandling :: ZZHandling(void) { } //========================================================================================================================================= // Деструктор класса. ===================================================================================================================== ZZHandling :: ~ZZHandling(void) { }
Вызываю его из эксперта:
//+---------------------------------------------------------------------------------------------------------------------------------------+ //| Сбор экстремумов Zig-Zag'a | //+---------------------------------------------------------------------------------------------------------------------------------------+ void getZZ(int extremumCountToCollect) { int cnt = -1; // порядковый номер Zig-Zag'a for (int i = 1; i <= Bars; i++) { if (cnt == 4) break; double ZZPrice = ND(iCustom(NULL, PERIOD_CURRENT, "ZZ_mtf", i_ZZTF, 0, i)); if (ZZPrice == EMPTY_VALUE) continue; Print("BEFORE ZZSequenceProperties[cnt].setData(i, ZZPrice);"); ZZSequenceProperties[cnt].setData(i, ZZPrice); Print("AFTER ZZSequenceProperties[cnt].setData(i, ZZPrice);"); cnt++; } }
До строки:
cnt++;
Не доходит вообще. Соответственно, переменная cnt всегда равно инициализированному значение.
Странно то, что структура же у нас с модификатором доступа public, а значит должна по идее иметь возможность вызываться. Хотя, возможно, в мкл не доделан вариант вызова методов из структур или такого вообще не бывает.
Все-таки нужно привыкать к тому, что мухи и котлеты должны быть отдельно друг от друга.
Структура - это тип данных. Соответственно не совсем правильно описывать тип данных в классе. Описать его нужно отдельно. А в классе - объявить член с ранее описанным типом данных.
Применительно к показанному ранее коду лучше всего сделать так:
struct ZZProperty { int barIndex; double price; }; class ZZHandling { private: //---- Конструктор и деструктор public: ZZHandling(); ~ZZHandling(); //------------------------------------ Функции для выполнения операций с данными Zig-Zag'a ---------------------------------------- ZZProperty m_stZZProperty; };

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Хотел написать так примерно?
Компилятор ругается:
Да, можно инклюдить структуру. Но не хочется заводить отдельный файл для неё. Хочется в класс поместить и всё. Но что-то не выходит. Это вообще реально сделать?