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

 
fxsaber:
Такое возможно только в тупом компиляторе. Сами же все понимаете.
C++ компилятор за вас думать не станет.
#include <iostream>
using namespace std;
struct S
{
    S operator +(const S&) {cout << "operator +\n"; return S{};}
};
S operator ""_s(const char*, size_t) {cout << "literal operator\n"; return S{};}
int main()
{
    cout << "___literal concatenation example___\n";
    S s = "sd"_s "sf"_s;
    cout << "___operator+ example___\n";
    S s2 = "sd"_s + "sf"_s;
}
Выхлоп:
___literal concatenation example___
literal operator
___operator+ example___
literal operator
literal operator

operator +

Как видно, оператор+ не был заменён склейкой во втором случае (создалось для литерала с последующим run time сложением). Компиятор просто не может вырезать его из-за слишком больших возможностей у программиста, это сильно ограничивает возможности для оптимизации. Это не МКЛ, конечно, в нём может всё иначе, но само утверждение: "нормальный компилятор всё сделает за меня" - ошибочно.
 
pavlick_:
Это не МКЛ, конечно, в нём может всё иначе, но само утверждение: "нормальный компилятор всё сделает за меня" - ошибочно.
Ну раз нет таких операторов в MQL, то и возможностей, связанных с ними, логично не иметь. Насчет компиляторов спорить не буду, т.к. ни разу не программист. Знаю немного только MQL.
 

Заколебался уже выкидывать в трубу время и деньги: оптимизатор зависает на последнем проходе. Агенты ничего не делают, все на стадии Authorized. В журнале тишина. Включать/отключать агентов бессмысленно, после повторного запуска оптимизации все начинается с нуля.

Кто сталкивался? Как бороться?

Файлы:
opt1.png  44 kb
opt2.png  96 kb
opt3.png  88 kb
 

Волшебная строка

Последовательность действий в MetaEditor\1495 при разрешении экрана 1024x768 :

  • Открыть прилагаемый файл
  • Ползунок горизонтальной прокрутки передвинуть до конца вправо (как на рисунке)
  • В 3-ей строке выделить мышью фрагмент /*12345*/
Дополнительные настройки: Сервис\Настройки\Общие\Табуляция 4 символа
Файлы:
Test.mq5  2 kb
 

При попытке преобразования строки в число с помощью функции StringToInteger(), в случае, если строка не содержит числа возвращается 0 без ошибки (GetLastError() = 0). В случае, если во входных параметрах представлена строка и пользователь некорректно указал значения - функция вернет некорректное значение и не выдаст ошибки. Это плохо.

Далее, если строка содержит некорректное представление числа, например 5о (вместо 50) - функция вернет значение 5, опять же не выдав ошибки. И тут мало того, что это не 0, дак функция разобрала строку как 5, что опять таки не корректно.

Уважаемые разработчики, доработайте функцию, пожалуйста, добавив коды ошибок или же в случае невозможности разбора - вернув значение LONG_MAX + ошибку, чтобы можно было определить что не так. Сейчас этого сделать невозможно.

Код проверочного скрипта:

#property version   "1.00"
#property script_show_inputs
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
input string value="05";
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   const long iValue=StringToInteger(value);
   Print("iValue = ",iValue,", lastError = ",GetLastError());
  }
//+------------------------------------------------------------------+
 

Реализуйте свой вариант функции - это займет не больше 10 минут.

Поведение системных функций мы менять не будем. 

 
Renat Fatkhullin:

Реализуйте свой вариант функции - это займет не больше 10 минут.

Поведение системных функций мы менять не будем. 

Т.е. Вы не считаете, что нужно дорабатывать функции, тем более функции, которые явно могут соврать? 

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

 
Alexey Kozitsyn:

Т.е. Вы не считаете, что нужно дорабатывать функции, тем более функции, которые явно могут соврать? 

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

Не нужно дорабатывать, это полные аналоги wtoi/atoi. Вопрос закрыт.
 

Ошибка при компиляции

#include <Math\Stat\Math.mqh>
struct S {};
 
здравствуйте, подскажите пожалуйста, возможно ли настраивать "разделитель периодов" в метатрейдере? я просто хочу чтобы на м5 я мог видеть, где кончались свечки 15, 30 и часовые, чтобы не смотреть всегда по времени, как это сделать можно?