Ошибки, баги, вопросы - страница 1903

 

Возник вопрос: как из класса узнать количество имеющихся экземпляров этого самого класса?

Причина такая: внутри класса есть цикл, внутри которого нужно делать некоторые расчёты только если есть лишь один экземпляр класса, в остальных экземплярах нужно пропускать такие расчёты во избежание их дублирования и выполнения лишних расчётов (они были сделаны в самом первом экземпляре класса и переданы "в общее пользование" - доступны за пределами класса)

 
Artyom Trishkin:

Возник вопрос: как из класса узнать количество имеющихся экземпляров этого самого класса?

Причина такая: внутри класса есть цикл, внутри которого нужно делать некоторые расчёты только если есть лишь один экземпляр класса, в остальных экземплярах нужно пропускать такие расчёты во избежание их дублирования и выполнения лишних расчётов (они были сделаны в самом первом экземпляре класса и переданы "в общее пользование" - доступны за пределами класса)


Описать в классе статический счетчик объектов. В конструкторе - увеличивать, в деструкторе - уменьшать.
 
Artyom Trishkin:

Причина такая: внутри класса есть цикл, внутри которого нужно делать некоторые расчёты только если есть лишь один экземпляр класса, в остальных экземплярах нужно пропускать такие расчёты во избежание их дублирования и выполнения лишних расчётов (они были сделаны в самом первом экземпляре класса и переданы "в общее пользование" - доступны за пределами класса)

Почему не использовать ссылку на один экземпляр класса?

А внутри — либо рассчитывать (при появлении новых данных), либо возвращать готовый результат.

 
Artyom Trishkin:

Возник вопрос: как из класса узнать количество имеющихся экземпляров этого самого класса?

Причина такая: внутри класса есть цикл, внутри которого нужно делать некоторые расчёты только если есть лишь один экземпляр класса, в остальных экземплярах нужно пропускать такие расчёты во избежание их дублирования и выполнения лишних расчётов (они были сделаны в самом первом экземпляре класса и переданы "в общее пользование" - доступны за пределами класса)


Еще лучше все уникальные расчеты вынести в отдельный класс и сделать его синглтонтон.
 
Stanislav Korotky:

Еще лучше все уникальные расчеты вынести в отдельный класс и сделать его синглтонтон.

Расчёт не уникальный - если есть единственный экземпляр класса, то расчёт должен быть, если есть несколько экземпляров, то зачем дублировать один и тот же расчёт в других экземплярах этого же класса? Это занимает ресурсы.

В то же время делать в родительском классе ещё один длинный цикл для расчёта этих самых данных - тоже не оптимально (уже два длинных цикла), да и класс-потомок тогда уже станет не самодостаточным.

 
Andrey Khatimlianskii:

Почему не использовать ссылку на один экземпляр класса?

А внутри — либо рассчитывать (при появлении новых данных), либо возвращать готовый результат.

Андрей, можно чуть более развёрнуто? Не совсем понял.
 
Artyom Trishkin:

если есть несколько экземпляров, то зачем дублировать один и тот же расчёт в других экземплярах этого же класса?

А зачем вообще эти другие экземпляры, если расчет один?


Artyom Trishkin:
Андрей, можно чуть более развёрнуто? Не совсем понял.

Лучше дай более детальное описание задачи, тогда и ответ более конкретный получится.

 
Artyom Trishkin:

Расчёт не уникальный - если есть единственный экземпляр класса, то расчёт должен быть, если есть несколько экземпляров, то зачем дублировать один и тот же расчёт в других экземплярах этого же класса? Это занимает ресурсы.

В то же время делать в родительском классе ещё один длинный цикл для расчёта этих самых данных - тоже не оптимально (уже два длинных цикла), да и класс-потомок тогда уже станет не самодостаточным.

Я предложил, как сделать то, что нужно, без дублирования. Про потомков речи не было.
 

Доброго времени суток!

Спустя 4 года вернулся к одному Советнику ( купил его в 2013г. и забыл про него). Решил попробовать его снова. Но теперь система выдает ошибку в одной из строк кода.  Видимо, что то поменялось за 4 года в Метатрейдере, так как раньше он точно работал. Сам в программировании "ноль", поэтому и покупал Советника))) Подскажите в чем может быть ошибка.

Вот часть кода

extern int    Bperiod = 20; // Период усреднения основной линии индикатора. 

extern int Bdeviation = 2;  // Отклонение от основной линии. 

extern int     Bshift = 0;  // Сдвиг индикатора относительно ценового графика. 

extern int    Baprice = 0;  // CLOSE=0, OPEN=1, HIGH=2, LOW=3, MEDIAN=4, TYPICAL=5, WEIGHTED=6 . 

extern string _6 = "========";

extern bool    UseAutoDig = true;      // Если=true->внешние переменные в пунктах умножаются на 10.

extern bool    UseECN\NDD = true;      // Если=true->ордера выставляются без стопов, затем модифицируются.

Ошибка выдается по последней строке в команде 

UseECN\NDD эта команда дальше в советнике много раз повторяется и в каждой строке где она есть вылетает ошибка

Примеры ошибок

'\' - illegal escape sequence e_plat2.mq4 49 22

'NDD' - semicolon expected e_plat2.mq4 49 23

'UseECN' - undeclared identifier e_plat2.mq4 144 6

'NDD' - undeclared identifier e_plat2.mq4 144 13

'NDD' - some operator expected e_plat2.mq4 144 13

'UseECN' - undeclared identifier e_plat2.mq4 172 6

'4206' - case value already used e_plat2.mq4 643 8


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




 
platoshkasexy:

UseECN\NDD эта команда дальше в советнике много раз повторяется и в каждой строке где она есть вылетает ошибка

Замените по всему коду "UseECN\NDD" на "UseECN_NDD" (Ctrl+H)