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

 
Andrey Pogoreltsev:

Тут не нужно однозначности. Должен быть просто порядок применения перегруженных методов. Т.е. задача решения перегрузки не в создании делемм, а в выборе лучшего подходящего метода. Если отбросить модификатор доступа, то берется первый метод из таблицы или же зависит от реализации компилятора, но неоднозначности тут нет.

Вот если бы было 2 метода, с разными входными параметрами например:

Возвращаясь к C++, у того же вектора есть:

Так что это абсолютно нормальная ситуация.

Вы привели какой-то уж совсем простой пример начальной школы. Вроде, к исходному примеру он не имеет отношения.


Alexey Navoykov:

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

Не знал о таком правиле, спасибо.

Если убрать оттуда кастинг, сделав аргумент типа int для обоих методов, то компилируется нормально.  Т.е. затык в MQL именно из-за кастинга.  Этот кастинг не должен влиять, т.к. он идентичный

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

 

В общем для решения этой проблемы (как и многих других в MQL) нужно один из методов выносить во вспомогательный класс:

class A { };

class _B
{
 protected: 
  A _a[];
 public:        
  const A * operator[](uint i) const { return &_a[i]; }  
};

class B : public _B
{
 public: 
  A * operator[](uint i)       { return &_a[i]; }
};
 
fxsaber:

Вы привели какой-то уж совсем простой пример начальной школы. Вроде, к исходному примеру он не имеет отношения.

Вам следует почитать стандарт C++, чтобы понять, что это все решается одним и тем же правилом, которое я цитировал выше.
 
Slava:

Начнём с того, что в кеше оптимизации, и в MT5, и в MT4 строковые параметры всегда усекались до 63 символов.

При передаче событий строка тоже не может быть длиннее 63 символов

То есть, то что приходит снаружи - ограничено

Что касается продуктов для конечных пользователей. Продавец должен учитывать ограничения. И если он их не знает, значит он недостаточно тестировал свой продукт перед продажей

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

 

столкнулся с такой проблемой, при тестировании советника, после установки параметров, и нажатии на кнопку старт, настройки советника сбрасываются на настройки по умолчанию, в чем может быть проблема?

в видео пример

 
Dmitry Melnichenko:

столкнулся с такой проблемой, при тестировании советника, после установки параметров, и нажатии на кнопку старт, настройки советника сбрасываются на настройки по умолчанию, в чем может быть проблема?

в видео пример

MT5 самостоятельно сбрасывает настройки в тестере после перехода на вкладку "Настройки"

Смотреть пост #1.

 

Я в соседней ветке вопрос задал, но, похоже, в неё мало кто заглядывает. Продублирую здесь:

https://www.mql5.com/ru/forum/6343/page1020#comment_11112212

Коротко: на фьючерсах (в тестере) сделки открываются и закрываются (по SL/TP), но всегда с нулевой прибылью. Может это быть багом тестера? Или какая-то хитрость нужна?

Вопросы от начинающих MQL5 MT5 MetaTrader 5
Вопросы от начинающих MQL5 MT5 MetaTrader 5
  • 2019.03.26
  • www.mql5.com
Подскажите пожалуйста, такой показатель тестера в жизни реален? И хороший это или плохой результат за год с депо 3000...
 

Баг компилятора.  При компиляции (проверке синтаксиса) файла .mqh с таким кодом не выдаётся ошибка.  Она выдаётся только при компиляции исполняемого файла, что неудобно.

class A
{
 public: 
  A(int) {  }
};

class B : public A { };  // Здесь должна быть ошибка  'A' - wrong parameters count

B b;
 
Alexey Navoykov:

Баг компилятора.  При компиляции (проверке синтаксиса) файла .mqh с таким кодом не выдаётся ошибка.  Она выдаётся только при компиляции исполняемого файла, что неудобно.

Потому что хэдер не компилируется в принципе :)))

Если заставить целиком компилировать хэдер, вы огребете множество ложных ошибок.

PS. Компилятор C++ без использования таких классов тоже не ругается.
 
Andrey Pogoreltsev:

Потому что хэдер не компилируется в принципе :)))

Если заставить целиком компилировать хэдер, вы огребете множество ложных ошибок.

PS. Компилятор C++ без использования таких классов тоже не ругается.

Я в курсе, что не компилируется.  Речь идёт о проверке синтаксиса (что в ME тоже называется термином "Компилировать"), ведь я в прошлом посте даже уточнил это в скобках.  Если в компиляторе C++ тоже запустить проверку синтаксиса (через командную строку обычно), то он будет ругаться как миленький.

Причина обращения: