Errores, fallos, preguntas - página 713

 
speedy:

El botón de compilación se ha perdido para siempre (hay que recargar el editor para recuperarlo)

Bueno, no exactamente... :) Me las arreglé para recuperarlo :)

Tienes que comentar la parte recursiva y pulsar el botón de compilación de depuración para hacerlo.

 
speedy:

1. no es seguro "exponer" al exterior elementos internos que no son de la clase base (y en este ejemplo, no el atributo en sí, sino sólo un elemento del array!) Además, no es posible cambiar su valor.

Además, contradice el "espíritu" de la programación orientada a objetos: todo el trabajo con los datos del objeto debe realizarse dentro del objeto, mediante sus propios métodos...

3. ¿Qué tal si sólo se utiliza Setter para el atributo de datos?

4. El código se beneficiaría de la legibilidad.

5. al final esta "simplicidad" con el indexador de valores l hará que nadie, ni siquiera tú, entienda cómo funciona este código...

6. Pasarás más tiempo buscando errores que escribiendo Setter.

¿Qué es eso, humor negro?

1. Lo siento, - tonterías. Entiendo que la paranoia está de moda aquí, y es un argumento de chatarra para "por qué no debes hacer eso". No veo ningún peligro en ello. Si se mira con atención, es que cualquier nombre, después de todo, es una referencia. La indexación es sólo una extensión del concepto de nombre. Nada más. Prohibamos los nombres por completo. Por seguridad. Los enlaces son extremadamente peligrosos, ¿no?

2. Esa lógica contradice violentamente el espíritu de la programación orientada a objetos con C++, C#, Delphi y un par de docenas de lenguajes menos populares donde los indexadores funcionan bastante bien tanto a la derecha como a la izquierda. Además, no contradice el sentido común y mi espíritu por alguna razón.

Los indexadores están hechos para comunicarse con el entorno externo. Su función es exactamente la de una interfaz. Puedo encapsular y ocultar cualquier cosa, pero necesito índices para operar con objetos como arrays. De hecho, todas las matrices se organizan de alguna manera. Por ejemplo, las matrices dinámicas regulares de mql. ¿Podemos prohibir ponerlos a la izquierda del operador de asignación? Reemplacémoslos con una función como SetArrayValue(array, i, j, value); esto mejorará simultáneamente la legibilidad. Y la depuración también será mucho más fácil. Ugh...

3. ¿Qué tal si hacemos un indexador normal? La criada es genial, por supuesto, pero la reina sigue siendo mejor.

4. Aquí es donde realmente estoy empezando a perder la cabeza. ¿Es eso ilegible?

  t[i]=i*i;

Eso es más legible, ¿no?

  t.setDataElement(i, i*i);

Genial. Creo que voy a ir a recibir tratamiento.

5. Genial.

6. Lloré.


 

El indicador dejó de compilarse en la compilación 630:

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[])
{
 //код
 for(int i=limit; i<rates_total && !IsStopped(); i++)
  {
   if()
    {
     //~400 стр. кода
     // i используется много раз
     // тут же определяется RT=true или false
    }
   if(RT)
    {
     double p=close[i];  // 'i' - undeclared identifier
    }
  }
 return(rates_total);  // 'rates_total' - undeclared identifier
}

c i error se puede eliminar poniendo un anuncio delante de for

int i;
for(i=limit; i<rates_total && !IsStopped(); i++)
{

}

¿Y qué hacer con'rates_total' - identificador no declarado?

Lo mismo en Win7 x64 y XP x32.

 

¿Puede decirme, por favor. ¿Se implementan MathMin() y MathMax() como funciones (conparámetros pasados por la pila) o como sustitución de macros(inline)? Según el libro de referencia son funciones.

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5
 
kPVT:

El indicador dejó de compilarse en la compilación 630:

c i error se puede eliminar poniendo un anuncio delante de for

¿Y qué hacer con'rates_total' - identificador no declarado?

Lo mismo en Win7 x64 y XP x32.

Debe haber un error en su código en alguna parte. El bloque que has proporcionado compila sin errores si declaras las variables limit, RT y la condición if()
 
Rosh:
Está claro que tienes un error en alguna parte de tu código. El bloque presentado compila sin errores si se declaran las variables limit, RT y se establece la condición if()

Naturalmente, no he dado el código, sino una estructura aproximada.

En la compilación 619 el indicador se compiló y funcionó bien.

En el 630 genera los errores mencionados.

El código es 100% inalterable. Obviamente, el trabajo del compilador ha cambiado.

 
Por favor,escriba a Service Desk y adjunte el código fuente. Esto ayudará a los desarrolladores a encontrar la causa y solucionarla.
 
speedy:

¿Bicho?

El código siguiente genera una especie de bucle perpetuo en el compilador. Pulsar Cancelar

no funciona inmediatamente, pero cuando lo hace, recupera el control del editor.

El botón de Cancelar en sí no desaparece, pero tampoco es accesible.

El botón de compilación se ha perdido para siempre (hay que recargar el editor para recuperarlo)

Gracias por el post, el error del compilador ha sido corregido.
 
victorg:

Por favor, avisa. ¿Se realizan MathMin() y MathMax() como funciones (conparámetros pasados por la pila) o como macrosubstituciones(inline)? Según el libro de referencia, son funciones.

Por supuesto, las funciones, porque en el momento de la compilación se desconocen los valores de los argumentos. En mi opinión, la línea y las macros son diferentes.

P.D: en línea o no en línea no puedo decirlo.

 
220Volt:

Por supuesto, las funciones, porque en el momento de la compilación se desconocen los valores de los argumentos. En mi opinión, la línea y las macros son diferentes.

P.D.: no puedo decir si están en línea o no.

Una macro y una función en línea son efectivamente cosas diferentes. Pero no me refiero a eso. Este es un ejemplo cuando en el momento de la compilación se desconocen los valores de los argumentos

#define  min(a,b) (((a)<(b))?(a):(b))
double func(a,b)
  {
  c=min(a,b);   // 1-й вариант
  c=fmin(a,b);  // 2-й вариант
  return(c);
  }

En el primer caso, el código debe ser pegado en la función actual (supongo) y en el segundo caso, la función es llamada con parámetros pasados por la pila (supongo). Pero a efectos de optimización, el compilador puede implementar también la segunda variante mediante sustitución. ¿Es así? No lo sé. Por eso he preguntado.

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5