Компиляция — это процесс перевода исходного кода MQL4/MQL5-программы на машинный язык. Ее результатом является создание исполняемого файла программы (*EX4 или *.EX5), который может быть запущен в торговой платформе. Скомпилировать можно любой файл (*.MQ4, *.MQ5 или *.MQH), однако исполняемый файл (*.EX4 или *.EX5) может быть получен только в...
вот наткнулся на "особенность"... больше часа потратил на перевод индикатора из четвёрки в пятерку. никак не мог понять где ошибка, т.к. код, как казалось, кросс-платформенный. в итоге вот оно незаметное местечко. зачем-то поменяли местами два параметра:
в четвёрке было можно индикатор самого себя вызывать через iCustom, чтобы мультитаймфрэйм получить. Не поделитесь ссылкой/примером для пятерки? почему-то не получается по аналогии сделать :(
Но боевом советнике нарвался на ситуацию, когда советник прекратил работу. Удалось въехать в причину. Классный нюанс, который заметить почти невозможно.
Реально прочувствовать его можно, попробовав увидеть проблему в этом коде.
// В коде содержится ошибка, которая остановит выполнение этого советника.inputint Range = 0;
class A
{
public:
void f() {}
};
A* const a = new A;
voidOnInit() { a.f(); }
voidOnDeinit( constint ) { delete a; }
Но боевом советнике нарвался на ситуацию, когда советник прекратил работу. Удалось въехать в причину. Классный нюанс, который заметить почти невозможно.
Реально прочувствовать его можно, попробовав увидеть проблему в этом коде.
Одно из главных правил - на каком уровне конструируете объект, на том же уровне нужно его дестроить. Не выше и не ниже.
Slava: Одно из главных правил - на каком уровне конструируете объект, на том же уровне нужно его дестроить. Не выше и не ниже.
Спасибо, хорошее правило. Стал жертвой своей некомпетентности. Правда, нужно еще какое-то правило для такого более очевидного случая.
// В коде содержится ошибка, которая остановит выполнение этого советника.inputint Range = 0;
class A
{
void f() {}
public:
A()
{
static A* Tmp = &this;
Tmp.f();
}
};
voidOnInit() { A a; }
Но боевом советнике нарвался на ситуацию, когда советник прекратил работу. Удалось въехать в причину. Классный нюанс, который заметить почти невозможно.
Реально прочувствовать его можно, попробовав увидеть проблему в этом коде.
А в чем проблема этого кода? В Deinit пришибли объект по константному указателю (знаю, что тут хэндл). Нормальная стрельба по конечностям в С++ стиле, а то распустили всех создатели)))
подскажите, почему стал ругаться компилятор вот на это (скрины приложил)?
год назад всё было ок, а сейчас поставил последний терминал, компилю и вот
и где искать ответы на такие сообщения компилятора?
и как правильно разрешить это предупреждение?
upd. добавил третий скрин - такое же сообщение на безобидный код
и 4-й скрин
что за строгости компилятора и как решить?
Столкнулся с такой особенностью.
Если во время определения класса со статическими полями тут же создается его объект, будет ошибка компиляции.
В последней версии компилятор не ругался на переменную без типа в классе. Но советник крашился при запуске
вот наткнулся на "особенность"... больше часа потратил на перевод индикатора из четвёрки в пятерку. никак не мог понять где ошибка, т.к. код, как казалось, кросс-платформенный. в итоге вот оно незаметное местечко. зачем-то поменяли местами два параметра:
улучшение?
есть ли ещё такие?
StringConcatenate
наверняка ещё что-то есть, мне тоже интересен полный список таких функций
---
возможно, стоит пройтись поиском по #endif в стандартной библиотеке
Но боевом советнике нарвался на ситуацию, когда советник прекратил работу. Удалось въехать в причину. Классный нюанс, который заметить почти невозможно.
Реально прочувствовать его можно, попробовав увидеть проблему в этом коде.
Но боевом советнике нарвался на ситуацию, когда советник прекратил работу. Удалось въехать в причину. Классный нюанс, который заметить почти невозможно.
Реально прочувствовать его можно, попробовав увидеть проблему в этом коде.
Одно из главных правил - на каком уровне конструируете объект, на том же уровне нужно его дестроить. Не выше и не ниже.
Спасибо, хорошее правило. Стал жертвой своей некомпетентности. Правда, нужно еще какое-то правило для такого более очевидного случая.
Может на оба случая Warning умный делать?
Но боевом советнике нарвался на ситуацию, когда советник прекратил работу. Удалось въехать в причину. Классный нюанс, который заметить почти невозможно.
Реально прочувствовать его можно, попробовав увидеть проблему в этом коде.