Errores, fallos, preguntas - página 1513

 

Que es mejor, desde el punto de vista del rendimiento, así:

  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;
  }

o mediante la sobrecarga de métodos?

 
zaskok3:

Que es mejor, desde el punto de vista del rendimiento, así:

o mediante la sobrecarga de métodos?

no verás ninguna diferencia en términos de rendimiento - ambas soluciones tienen su lugar :)
 
coderex:
no verás una diferencia en términos de rendimiento - ambas soluciones tienen un lugar :)

Gracias. Otra pregunta:

¿Para qué sirven los campos const en una estructura? ¿Estructuras de este tipo ni siquiera se pueden pasar (juramentos del compilador o desbordamientos de pila)?

#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;
}


Sobrecargar el operador de asignación para las estructuras es realmente imposible (tendría sentido debido a la recursión infinita). Entonces, ¿por qué constar de campos en una estructura?

 
Karputov Vladimir:

En Windows 10 x64 nunca encontré este error en la compilación 1241. Tras el comando "Desplegar", la ventana gráfica se despliega por completo, sin agujeros:

Es probable que tengas algunas configuraciones cambiadas dentro de tu sistema operativo (tal vez te dediques a recortar los valores predeterminados de tu sistema operativo o a limpiar el registro o cosas por el estilo...).

Cuando arrastre el cristal con el ratón, pulse "Shift" o "Ctrl" o "Alt" en este punto.

Mi mejor consejo es que escriba al serviceDesk con una descripción detallada, con código propio (que muestre los ticks), con capturas de pantalla.

>> Probablemente has cambiado algunas configuraciones dentro de tu sistema operativo (tal vez eres aficionado a cortar las características estándar de tu sistema operativo, o a la limpieza del registro, etc...).

No estoy en ese tipo de cosas, los sistemas están limpios

>> Aquí puedo aconsejarle con una descripción detallada, con su código (que muestra tics), con capturas de pantalla para hacer una aplicación al ServiceDesk.

¿Y dónde está esto? Pensaba que esta rama era el serwer

 

Si uso #include para incluir un archivo mqh que contiene algo similar en el indicador:

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

no hay ningún error en la fase de compilación del indicador. Pero ocurre con mqh por separado (ver arriba).

¿Cómo puedo encontrar el valor de este indicador de propiedad en MT4, para que el compilador no se queje más de una vez en mqh enchufado?

 

Intento que la aplicación funcione en MQL5 y MQL4 de forma idéntica.

Sospecho que al introducir las variables sinput en MQL4, se olvidaron de añadir las funcionesParameterSetRange() yParameterGetRange() al lenguaje.

Aparecen en la documentación de MQL4 comoParameterSetRange() yParameterGetInput()-https://docs.mql4.com/basis/variables/inputvariables#sinput

pero el compilador no los acepta.

Por desgracia, sin estas funciones se pierde toda la diversión de las variables sinput.

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

Gracias. Otra pregunta:

¿Para qué sirven los campos const en una estructura? ¿Estructuras de este tipo ni siquiera se pueden pasar (juramentos del compilador o desbordamientos de pila)?


Sobrecargar el operador de asignación para las estructuras es prácticamente imposible (tendría sentido debido a la recursión infinita). Entonces, ¿por qué constar de campos en una estructura?

Disfruta:

#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:

Disfruta:

Es bueno ir al grano, ¡gracias! Todavía me estoy preguntando por qué no me di cuenta yo mismo antes de sobrecargar el constructor, sino que fui al operador de asignación. Al fin y al cabo, la solución es obvia.
 

Moví la carpeta del terminal MT4 a otra unidad. Anteriormente lo ejecutaba con la llave portátil. Esta vez he hecho lo mismo.

El terminal se conectó al servidor de inmediato. En el pasado, cuando movía la carpeta de un terminal, las contraseñas no se guardaban y tenía que volver a introducirlas. Ahora (construcción 950) no sucede.

¿Es esto normal (y sólo para mí)?

 
zaskok3:

Qué mejor manera, desde el punto de vista del rendimiento, es ésta:

Sobrecarga, por supuesto.
Razón de la queja: