Errores, fallos, preguntas - página 1784

 
Rashid Umarov:
Mire aquí - Ejecución del programa

Para ver un resumen de los programas de MQL5, consulte la siguiente tabla:

Programa

Ejecución

Nota

Guión

En su propio hilo, tantos scripts como hilos de ejecución haya para ellos

Un script en bucle no puede interrumpir el trabajo de otros programas

Experto

En su propio hilo, tantos expertos - tantos hilos de ejecución para ellos

Un experto en bucle no puede interrumpir el trabajo de otros programas

Indicador

Un hilo de ejecución para todos los indicadores de un símbolo. Tantos símbolos con indicadores - tantos hilos de ejecución para ellos

Un bucle sin fin en un indicador detendrá todos los demás indicadores en este símbolo

Gracias, eso es lo que quería decir

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

Bichos, errores, preguntas

Slawa, 2017.02.06 07:22

Pero aquí tampoco se puede contar con que la orden Deinit en M5 se procese antes que la orden Init en M15

 
-Aleks-:

Por desgracia, no estoy familiarizado con este formato.

El experimento demostró que el número en el búfer gráfico se representa con las mismas reglas que el doble, es decir, que no es posible pasar un número tan largo por el búfer gráfico, lo que resulta frustrante.

Por desgracia, el búfer gráfico sólo puede contener un número de 10 dígitos.

Por cierto, ¿por qué hay un límite de 4 decimales?

 

Error de compilación (o más bien ningún mensaje de error)

class A {
public:
        int i;
};
class B : public A {};
class C : protected A {};
class D : protected B {};
void OnStart()
{
        C c;
        Print( c.i ); //Error: 'i' - protected member access error
        D d;
        Print( d.i ); //нормально???
}
 

Error de ejecución: la carga de EX5 ha fallado

class A;
typedef void (*f)( A*);
class A {
    virtual void g( A *a ) {}
        f ff;
};
void OnStart() { Print( __FUNCTION__ ); }
 

Error durante la ejecución

class B;
void f( B* );
class A { public:
        virtual ~A() { f((B *)&this ); } //(*)
        virtual void g( A* ) { Print( __FUNCTION__ ); }
};
class B : public A { public:
        virtual void g( A* ) { Print( __FUNCTION__ ); }
};
void f( B *b ) { b.g( b ); }
void OnStart() //(1)
{
        B *b = new B;
        delete b;
}

Resultado: fundición incorrecta de punteros en (*)

Y si

void OnStart() { B b; } //(2)

resultado: B::g

pero ¿cuál es la diferencia fundamental entre OnStart (1) y (2)?

Además, el resultado de un código similar en C++: A::g

 

A100: 

¿Para qué serviría un destructor virtual como el de tu ejemplo? ¿Se puede anular en la descendencia?

 
fxsaber:

¿Para qué serviría un destructor virtual como el de tu ejemplo? ¿Se puede anular en la descendencia?

En MQL siempre es virtual, aunque no se especifique explícitamente
 
A100:
En MQL siempre es virtual, aunque no se indique explícitamente
Así que no has respondido a la pregunta: ¿para qué?
 
fxsaber:
Así que no has respondido a la pregunta: ¿para qué?
Si todos los destructores en MQL son virtuales, entonces la pregunta por qué necesitamos un destructor virtual se reduce a ¿para qué necesitamos un destructor? Y esta es una pregunta demasiado general.
 
A100:
Si todos los destructores en MQL son virtuales, entonces la pregunta de para qué sirve un destructor virtual se reduce a la pregunta de ¿para qué sirve un destructor? Y esta es una pregunta demasiado general.
Sé para qué se utiliza un destructor. No me queda claro por qué debería añadir la palabra virtual antes de su definición.
Razón de la queja: