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

 

Как лучше, с точки зрения производительности, так:

  template <typename T>
  void SetProperty( const int id, const T Value, const int Modifier = 0 ) const
  {
    const string sType = typename(T);

    if (sType == "double")
      ::ObjectSetDouble(this.Chart, this.Name, id, Modifier, (double)Value);
    else if (sType == "string")
      ::ObjectSetString(this.Chart, this.Name, id, Modifier, (string)Value);
    else
      ::ObjectSetInteger(this.Chart, this.Name, id, Modifier, (long)Value);

    return;
  }

или перегрузкой методов?

 
zaskok3:

Как лучше, с точки зрения производительности, так:

или перегрузкой методов?

с точки зрения производительности разницу не увидите - оба решения имеют место быть :)
 
coderex:
с точки зрения производительности разницу не увидите - оба решения имеют место быть :)

Спасибо! Еще вопрос:

Какой смысл const-полей в структуре? Такие структуры невозможно даже передать (компилятор ругается или стэк переполняется)?:

#property strict 

struct STRUCT
{
  const int Num;
  
  STRUCT( const int iNum = 0 ) : Num(iNum) // Если затереть " = 0", то будет ошибка компиляции: 'STRUCT' - wrong parameters count 
  {
  }
  
/*
// Так получается обойти ошибки компиляции, но на этапе выполнения: Stack overflow   
  STRUCT operator = ( STRUCT &Struct )
  {
    STRUCT Res(Struct.Num);
    
    return(Res);
  }
*/
};

const STRUCT GetStruct( const int Num = 0 )
{
  STRUCT Struct(Num);
  
  return(Struct); // 'return' - not allowed for objects with protected members or inheritance 
}

void OnStart( void )
{
  Print(GetStruct(1).Num);
  
  return;
}


Перегрузка оператора присваивания для структур фактически невозможна (быссмысленна из-за бесконечной рекурсии). Ну и зачем тогда const-поля в структуре?

 
Karputov Vladimir:

На Windows 10 x64 никогда не встречал такой ошибки на 1241 билде. После команды "Развернуть" окно графика разворачивается полностью, без дыр:

 

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

Когда мышкой тяните стакан понажимайте в этот момент или "Shift" или "Ctrl" или "Alt".

 

 Тут могу посоветовать с подробным описанием, со своим кодом (который показывает тики), со скриншотами составить заявку в СервисДеск.

>> Вероятно у Вас изменены какие-то настройки внутри операционной системы (может увлекаетесь обрезанием штатных возможностей операционной системы или чистками реестра или тому подобным...).

 подобным не увлекаюсь, системы чистые

 

>> Тут могу посоветовать с подробным описанием, со своим кодом (который показывает тики), со скриншотами составить заявку в СервисДеск.

а это куда? я думал, что эта ветка - это и есть сеервис

 

Если в индикатор через #include полключаю mqh-файл, в котором содержится нечто подобное:

int GetIndicatorBuffers( void )
{
  return(indicator_buffers); // 'indicator_buffers' - undeclared identifier
}

то на этапе компиляции самого индикатора ошибок не возникает. А вот с mqh  в отдельности - выскакивает (см. выше).

Как в MT4 подругому можно узнать значение данного property индикатора, чтобы компилятор не ругался лишний раз в подключаемых mqh?

 

Пытаюсь добиться одинаковой работы приложения в MQL5 и MQL4.

Есть подозрение, что введя sinput переменные в MQL4, забыли в язык добавить функции ParameterSetRange() и ParameterGetRange()

В документации к MQL4 они фигурируют как  ParameterSetRange() и ParameterGetInput()  -   https://docs.mql4.com/basis/variables/inputvariables#sinput

но компилятор их не принимает.

Без этих функций, к сожалению, вся фишка sinput переменных пропадает.

Input Variables - MQL4 Documentation
Input Variables - MQL4 Documentation
  • docs.mql4.com
Input Variables - MQL4 Documentation - MQL4 Documentation
 
zaskok3:

Спасибо! Еще вопрос:

Какой смысл const-полей в структуре? Такие структуры невозможно даже передать (компилятор ругается или стэк переполняется)?:


Перегрузка оператора присваивания для структур фактически невозможна (быссмысленна из-за бесконечной рекурсии). Ну и зачем тогда const-поля в структуре?

Наслаждайтесь:

#property strict

struct STRUCT
{
  const int Num;
  
  STRUCT( const int iNum  ) : Num( iNum )
  {
  }
  
  STRUCT( const STRUCT& Struct ) : Num( Struct.Num )
  {
  }
};

const STRUCT GetStruct( const int Num = 0 )
{
  STRUCT Struct( Num );
  return Struct;
}
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   Print( GetStruct(1).Num );
}
//+------------------------------------------------------------------+
 
Koldun Zloy:

Наслаждайтесь:

Приятно, когда сразу по делу, спасибо! До сих пор гадаю, почему сам не догадался до перегрузки конструктора, а полез в оператор присваивания. Ведь решение очевидное же!
 

Перенес папку с MT4-терминалом на другой диск. До этого запускал с ключем portable. И в этот раз поступил также.

Терминал соединился сразу с сервером. Раньше при переносе папки терминала пароли не сохранялись - надо было повторно вводить. Сейчас (билд 950) этого не происходит.

Это нормально (и только у меня)?

 
zaskok3:

Как лучше, с точки зрения производительности, так:

Перегрузкой конечно.
Причина обращения: