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

 
Violetta Novak #:

попробуйте:

и прогоните оптимизацию, будет понятно, что флаги Тестер и Оптимизация эквивалентны, то есть, всё же, флаг MQL_TESTER это не "одиночный прогон", вернее не только,

данный код будет выдавать всегда значение кастомного критерия 123.

Да что ж такое то... Я знаю что флаг Тестер всеобщий. Ну так надо дополнительно отсекать. Зато если Не Тестер - то точно Не тестер.

Если Тестер и Визуал, то Визуал.

Если Тестер и Не Визуал, то может быть Оптимизация - проверить Оптимизацию

и далее в том же духе

 
Alexey Viktorov #:

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

Но если вам нужен визуальный режим, то и проверять надо только один MQL_VISUAL_MODE и в других проверках нет необходимости

Вы обсасываете проблемы первоклассников… В том нет проблем никаких…


Добавлено:

Всё это относится и к режиму оптимизации.

Вы не правы.

Если использовать только  MQL_VISUAL_MODE, то это не будет работать на графике MT5.

 

Добрый день.

У меня "почему-то вдруг" стал недоступен на компе отладчик. База (МТ5) установлена на внешнем жестком диске. Подскажите плиз, кто в курсе, какие я законы природы нарушил и как восстановить работоспособность?

 
Sergey Voytsekhovsky #:

Добрый день.

У меня "почему-то вдруг" стал недоступен на компе отладчик. База (МТ5) установлена на внешнем жестком диске. Подскажите плиз, кто в курсе, какие я законы природы нарушил и как восстановить работоспособность?

Ну или куда такие вопросы можно задать? Может где-то описано, каковы требования к терминалу, его настройкам, расположению файлов и тд., почему вообще МетаЭдитор может делать отладку недоступной???

 
Sergey Voytsekhovsky #:

Добрый день.

У меня "почему-то вдруг" стал недоступен на компе отладчик. База (МТ5) установлена на внешнем жестком диске. Подскажите плиз, кто в курсе, какие я законы природы нарушил и как восстановить работоспособность?

Попробуйте увидеть файл исходник

Или скопируйте полный путь и вставьте, хоть в сам файл исходник. Потом можно будет удалить или просто отменить вставку.

Если файл находится не в папке Terminal\MQL5\Experts значит отладка работать не будет. Или соответственно \Indicators или \Scripts

 
Alexey Viktorov #:

Попробуйте увидеть файл исходник

Или скопируйте полный путь и вставьте, хоть в сам файл исходник. Потом можно будет удалить или просто отменить вставку.

Если файл находится не в папке Terminal\MQL5\Experts значит отладка работать не будет. Или соответственно \Indicators или \Scripts

Большое Спасибо!!! Совет помог, кажется разобрался.

 

b3333. Этот скрипт компилируется и выполняется без предупреждений. При отладке видно, что в "b=a" вызывается A::operator=, хотя он переопределен в A1.  (в С++ здесь  будет ошибка компилятора).

class A
  {
public:
   void              operator=(const A&) {}
  };

class A1: public A
  {
   int               i;
   void              operator=(const A1&) {}
  };

void OnStart()
  {
   A a;
   A1 b;
   b = a;            //Вызывается A::operator=(const A&) (должна быть ошибка!)
  }

Это может привести к большим багам в программах!

 

Подскажите, пожалуйста, по вертикальному масштабированию, по оси времени.

Как сделать, чтобы масштаб не ограничивался ничем, когда на шкале цены нажимаешь лкм и тянешь вверх?
Мне нужен такой увеличенный график иногда, как в квике.

Вижу, что можно выставить фиксированный масштаб в настройках графика.

Можно ли сделать горячую клавишу, чтобы масштаб устанавливался по окну, а другую - чтобы увеличивался вдвое?

 
mktr8591 #:

b3333. Этот скрипт компилируется и выполняется без предупреждений. При отладке видно, что в "b=a" вызывается A::operator=, хотя он переопределен в A1.  (в С++ здесь  будет ошибка компилятора).

Это может привести к большим багам в программах!

Полностью, про разрешение перегрузки в с++ читать тут: https://en.cppreference.com/w/cpp/language/overload_resolution

В mql практически аналогично должно быть.А по Вашему примеру: обе перегрузки имеют спецификатор доступа public, поэтому компилятор их разрешает исходя из типа аргумента и естественно выбирает A&, поэтому все правильно. Тут нет переопределения, тут есть два оператора = с разными типами аргумента.

UPD: А по поводу наличия ошибки в С++ и отсутствия в mql5, так у них неявно вот так делается:

class A {
public:
        void operator =(const A&) { std::cout << "A" << std::endl; }
};

class A1:public A {
public:
        void operator =(const A1&) { std::cout << "A1" << std::endl; }
        using A::operator =;
};

Вроде как были разговоры про то, что бы поведение в этом случае как в с++ сделать

 
mktr8591 #:

b3333. Этот скрипт компилируется и выполняется без предупреждений. При отладке видно, что в "b=a" вызывается A::operator=, хотя он переопределен в A1.  (в С++ здесь  будет ошибка компилятора).

Это может привести к большим багам в программах!

Тут нет переопределения.
Чтобы не путаться, используйте сцификатор override в случаях, когда собираетесь что-то переопределить в потомке, и компилятор выдаст ошибку, если в родителе нет такого метода.
Причина обращения: