Errores, fallos, preguntas - página 2044

 
Alexey Navoykov:

Error en la inicialización de variables estáticas. No estaba presente en las construcciones antiguas.

A quien no le importe enviar esto al servicio técnico. Ya no tengo ningún deseo de comunicarme con ellos allí.

No es un bug, se ha discutido desde aquí. Extracto de

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Peculiaridades del lenguaje mql4, consejos y trucos

Alexey Viktorov, 2017.04.30 08:54

La secuencia de inicialización: (para los que no lo conozcan)

Primero, las variables de nivel global y luego lasestáticas dispuestas según la prioridad de las funciones, OnInit(), OnTick() o OnCalculate()... No me interesaba ir más allá, y no me interesaban los locales en mi época. Así que resulta que en este código se llama a la función antes de inicializar las variables estáticas, de ahí el error del que hablamos. La función se llama antes de inicializar la variable

 
fxsaber:

No es un bug, se ha discutido desde aquí. Extracto de

Entonces, si se discutió entre tú y Alexey Viktorov, ¿eso te da razones para creer que no es un error? ) Y este mismo hombre afirma que su nivel de conocimientos de programación es muy inferior al suyo. Es decir, puede ser tachado de la lista. Eres el único que queda). Lo he discutido contigo mismo, así que no es un error).

Es un error. En principio, no puede ser que la inicialización de una variable sea ignorada y el código siga ejecutándose saltándosela. Esto es una tontería. Y el orden de inicialización no importa aquí. La variable se inicializa o el compilador genera un error aquí. No hay una tercera vía. Si no, no es un lenguaje de programación, sino otra cosa.

 

Otro error en las nuevas construcciones:

template<typename T>
int F1(const T& array[])
{
  return ArrayMaximum(array);
}


template<typename T>
int F2(const T& array[]) { return F1(array); }


void OnStart()
  {
    int arr[4]= { 1, 2, 3 };
    Print(F2(arr));  // Выдаёт -1 !!!
  }


Eh, es muy burdo. Pensé en actualizar a las nuevas construcciones, porque las antiguas no aceptan productos en el Market. ¡Y aquí hay un error en un error!

 
Alexey Navoykov:

Entonces, si esto se discutió entre tú y Alexey Viktorov, ¿eso te da razones para creer que no es un error? ) Y esta misma persona afirma que su nivel de conocimientos de programación es muy inferior al suyo. Es decir, puede ser tachado de la lista. Eres el único que queda). Lo he discutido contigo mismo, así que no es un error).

Es un error. En principio, no puede ser que la inicialización de una variable sea ignorada y el código siga ejecutándose saltándosela. Esto es una tontería. Y el orden de inicialización no importa aquí. La variable se inicializa o el compilador genera un error aquí. No hay una tercera vía. Si no, no es un lenguaje de programación, sino otra cosa.

Puedes tacharlo, nunca extiendo mis dedos "qué clase de programador soy"...

¿Y tu madre no te dice que leas la documentación? He insertado una cita de la documentación especialmente para esas personas.

Hay un foro para el comercio, los sistemas de comercio automatizados y las pruebas de las estrategias de comercio

Peculiaridades de mql4, consejos y trucos

Alexey Viktorov, 2017.04.29 12:50

¿Está bien que la ayuda diga que la variable estática... lea usted mismo

Una variable estática puede ser inicializada con una constante o una expresión constante correspondiente a su tipo , a diferencia de una simple variable local que puede ser inicializada con cualquier expresión.


Pero no una función.

Así es como funciona

#property strict
#property indicator_chart_window

int TestBrokenStatic()
{
   static int stInt = 101;
   stInt++;
   return stInt;
}

int OnInit()
{
   static int result = 0;
   result = TestBrokenStatic();
   Print("TestStatic Expected result 102   - Actual result=", result);
   result = TestBrokenStatic();
   Print("TestStatic Expected result 103   - Actual result=", result);
   
   return INIT_SUCCEEDED;
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   return rates_total;
}
2017.04.29 13:49:51.546 !Test USDCHF,M15: TestStatic Expected result 103   - Actual result=103
2017.04.29 13:49:48.457 !Test USDCHF,M15: TestStatic Expected result 102   - Actual result=102
2017.04.29 13:49:40.089 Custom indicator Test\!Test USDCHF,M15: loaded successfully

 
Alexey Navoykov:

Otro error en las nuevas construcciones:

Eh, es tan crudo por aquí. Pensé en actualizar a las nuevas construcciones, porque las antiguas no aceptan productos en el Market. ¡Y luego hay un error en un error!

¡Y he acertado!

 
Alexey Viktorov:

Puedes tacharlo, nunca extiendo mis dedos "qué clase de programador soy"...

¿Y tu madre no te dice que leas la documentación? Especialmente para estas personas, he insertado una cita de la documentación

Ya veo, entonces me disculpo, no me di cuenta de inmediato. Es increíble, por supuesto, cómo se las arreglaron para cambiarlo sin que nadie se diera cuenta. Lo que no entiendo es por qué el compilador no reacciona ante la ejecución de una operación no válida. Es decir, hay un error en cualquier caso
 
fxsaber:

¡Lo he entendido bien!


Hmmm, ¿cuál es tu constitución? El mío es 1653.

 
Alexey Navoykov:

Entonces, si esto se discutió entre tú y Alexey Viktorov, ¿eso te da razones para creer que no es un error? ) Y esta misma persona afirma que su nivel de conocimientos de programación es muy inferior al suyo. Es decir, puede ser tachado de la lista. Eres el único que queda). Lo he discutido contigo mismo, así que no es un error).

Es un error. En principio, no puede ser que la inicialización de una variable sea ignorada y el código siga ejecutándose saltándosela. Esto es una tontería. Y el orden de inicialización no importa aquí. La variable se inicializa o el compilador genera un error aquí. No hay una tercera vía. De lo contrario, no es un lenguaje de programación sino otra cosa.

Si encuentro una explicación lógica (coherente) del resultado, no veo un error. No creo que sea aceptable probar un error si el resultado no coincide con C++. Es alguien en C++ que pensó y lo hizo. Pero puede que no lo hayan pensado y por eso no lo hayan hecho. Por eso es mejor no referirse a algo de fuera, sino confiar en tu propio concepto interno de lo que debe ser. Y es deseable que ese "propio" sea realmente propio. Y no el resultado de la imposición imperceptible de estereotipos "como debe ser" a medida que se gana experiencia en programación.

No me importa equivocarme. Estoy aprendiendo poco a poco en mi propio rastrillo.

 
Alexey Navoykov:

Hmm, ¿cuál es tu constitución? Tengo 1653.

1653x64.

 
fxsaber:

1653x64.

Es extraño que haya una discrepancia entonces...


Que otra persona lo compruebe con ellos mismos.