Errores, fallos, preguntas - página 1543

 
comp:

Por ejemplo, en la descripción de ObjectSetInteger ahora

Debe ser

Lea todos los artículos hasta el final.

prop_id

[in] Identificador de la propiedad del objeto. El valor puede ser uno de los valores de la enumeración ENUM_OBJECT_PROPERTY_INTEGER.

Ya se lo he dicho. Lea atentamente la documentación sin un sable en la mano.
 
Slawa:

Leer los hilos hasta el final

Ya te lo he dicho. Lee la documentación con atención, sin un sable en la mano.

Lee con MUCHO cuidado y hasta el final. Su cita es de allí

Identificador de una propiedad del objeto. El valor puede seruno de los valores de la enumeraciónENUM_OBJECT_PROPERTY_INTEGER.

Debe ser

Identificador de la propiedad del objeto. El valor DEBE ser uno de los valores de la enumeraciónENUM_OBJECT_PROPERTY_INTEGER.

La exigencia de un ghosting explícito a este tipo se confirma con la única variante compilada en cinco (compruébelo usted mismo). Sin este fantasma el compilador se queja de la ausencia de las correspondientes sobrecargas.

 
No conocía este truco. Si abres un archivo mq4 en un meta-editor cinco, ¡se compilará en ex4!
 
un compilador un editor
 

Es decir, cuando terminó de leerlo, pensó "El valor puede ser uno de los valores de la enumeraciónENUM_OBJECT_PROPERTY_INTEGER. O puede no serlo. Y lo que no puede ser no está especificado en la documentación, así que todo lo que no está prohibido está permitido. Ya que estamos extendiendo los principios de la vida social a la programación".

Me pregunto, ¿qué le dijo MetaEditor sobre el tipo del parámetro correspondiente cuando establece los parámetros de esta función?

 
Hay muchas ambigüedades en la ayuda de MQL. Así que, en ese sentido, comp tiene razón: cuantas menos interpretaciones posibles de la lectura de la ayuda, mejor.
 
Slawa:

Es decir, cuando terminas de leerlo, piensas "El valor puede ser uno de los valores de la enumeraciónENUM_OBJECT_PROPERTY_INTEGER. O puede no serlo. Y lo que no puede ser no está especificado en la documentación, así que todo lo que no está prohibido está permitido. Ya que estamos extendiendo los principios de la vida social a la programación".

No, no lo creo. Pensé que si el código compilaba correctamente con MT4, también debería hacerlo con MT5. Cuando no lo hizo, empecé a indagar. Compruebe el código en MT4 y en MT5 y asegúrese de que

class CHARTOBJECT
{
public:
  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(0, "", id, Modifier, (double)Value);
    else if (sType == "string")
      ::ObjectSetString(0, "", id, Modifier, (string)Value);
    else
      ::ObjectSetInteger(0, "", id, Modifier, (long)Value);

    return;
  } 
  
  virtual void operator =( const string Value ) const
  {
    this.SetProperty(OBJPROP_TEXT, Value);

    return;
  }
};

Me pregunto, ¿qué le dijo MetaEditor sobre el tipo de parámetro relevante cuando escribió los parámetros de esta función?

Lo corrigió correctamente utilizando la especificación que proporcioné anteriormente. En la documentación es int.

 
comp:

No, no lo creo. Pensé que si el código compilaba sin errores en MT4, también debería hacerlo en MT5. Cuando no lo hizo, empecé a indagar. Compruebe el código en MT4 y en MT5 y asegúrese de que

¿Por qué?

MT4 y MT5 tienen una arquitectura inherentemente diferente

Al traducir MQL4 de la sintaxis antigua a la nueva (lo que se llama MQL4+) tuvimos que mirar hacia atrás a la antigua sintaxis de MQL4 que tenía muchas cosas que faltaban, incluyendo las enumeraciones.

 

comp, ofrezcámonos a leer sólo durante una semana. Sé un lector, no un escritor.

Todo lo que estás hablando aquí se ha discutido muchas veces, no sólo en este foro, sino también en MQL4.com.

 
Slawa:

¿Por qué?

MT4 y MT5 tienen una arquitectura diferente desde el principio

Al migrar MQL4 de la antigua sintaxis a la nueva (lo que se llama MQL4+) tuvimos que mirar hacia atrás, a la sintaxis MQL4 anterior, a la que le faltaban muchas cosas, incluidas las enumeraciones.

Se puede discutir durante mucho tiempo sin éxito. El caso es que si la documentación no fuera int, sino como en la pista al teclear el nombre de la función, habría encontrado inmediatamente la causa de la regañina del compilador (no era evidente en el ejemplo con la plantilla). Porque según la documentación el código debería haber compilado como allí int y "puede". Lo que me impide hacer coincidir la documentación y los tooltips, no lo sé. Pero para el futuro recordaré que en caso de malentendidos es mejor mirar lo que muestran los tooltips en lugar de la documentación.
Razón de la queja: