Errores, fallos, preguntas - página 2670

 

Error de comprobación (o quizás ya no lo entiendo)

Falta el comercio de beneficios en el probador

 

Otro encuentro con el error descrito anteriormente - "Comportamiento indefinido, se crea un objeto complejo envuelto con el tipo interno "C" varias veces, pero resulta ser un tipo de datos completamente diferente, tal vez "B", tal vez "int", lo que quiera...".
De hecho, tardé un día en localizar, reproducir y encontrar soluciones, lamentablemente, todo fue en vano...
Lasolución sugerida anteriormente utilizando un parámetro de plantilla ficticio, para el ejemplo de abajo, resultó no ser viable.

template<typename _Tp, typename _Opt>
struct It_g{
   class Opt : public _Opt{}; 
   _Tp p;
};

template<typename _Tp>
class A_g{
public:
   struct It : public It_g<_Tp, Opt_g<_Tp>>{};
};

template<typename _Tp>
class V{
public:
   struct It : public  A_g<_Tp>::It{};
   It b;
};

template<typename _Tp>
class Opt_g{
   template<typename _It>
   static void test(_It &it){      
      printf(typename(_Tp));          // int
      printf(typename(it.p));         // ClassA*
      
      _Tp p = it.p;                   // Compiler Error: '=' - illegal operation use
   };
};


template<typename T>
class GetStructType{
public:
   struct type : public T{};
};

template<typename _It>
void test(_It &it){
   GetStructType<_It>::type::Opt::test(it);
}

class ClassA{};


void OnStart(){ 
   V<int> v1;
   test(v1.b);
   
   V<ClassA*> v2;
   test(v2.b);
   
   V<int>::It it3;
   test(it3);
   
   V<ClassA*>::It it4;
   test(it4);
}

La única solución factible la conseguí utilizando el tipo de auto "casero", pero obtuve enormes costes de compilación con cero beneficio en la velocidad del código real...
Por favor, ayuda, tal vez alguien tiene una idea de cómo resolverlo.

 
Alexey Klenov:

Error de comprobación (o quizás ya no lo entiendo)

El visualizador, por razones arquitectónicas, no siempre muestra el estado actual.

 
fxsaber:

El visualizador, por razones arquitectónicas, no siempre muestra el estado real.

Gracias, lo tendré en cuenta.
 

Defectos en la caché de funciones/clases de las plantillas:
(no solucionado por MT5(build 2361)) *** (arriba) Comportamiento indefinido, creas un objeto complejo envuelto con el tipo interno "C" varias veces y resulta ser un tipo de datos muy diferente, quizás "B", quizás "int", lo que quieras...
(no se ha solucionado con MT5(build 2361)) * Error de compilación, error al pasar un puntero de función como un argumento de plantilla const ref.
(no se ha solucionado con MT5(build 2361)) * Error de compilación, el objeto B<int> puede ser creado después del objeto de clase B<void*>, pero se produce un error de compilación si se hace antes.


Defectos en el trabajo de las funciones/clases de las plantillas:
(no solucionado por MT5(build 2361)) *** (arriba) Error de compilación, error dentro de la función de plantilla, el puntero pasado dentro de la operación deconversión de tipo explícito se comporta como una clase de otra manera.
(no se ha solucionado con MT5(build 2361)) ** Error de compilación, error en la generación del código de la clase de la plantilla cuando se utiliza la clase interna.
(no se ha solucionado en MT5(build 2361)) ** Error de compilación, error al intentar acceder a la clase interna para el parámetro de la función de la plantilla.
(no se ha solucionado con MT5(build 2361)) ** Error de compilación, error en la generación del método/clase de la plantilla, el proceso de "auto-reemplazo" del parámetro de la plantilla se sale del ámbito en el código del programa principal.
(no se ha solucionado con MT5(build 2361)) * Error de compilación, error con la generación de código de clase de plantilla que falta cuando la clase de plantilla actúa como valor de retorno para el método de plantilla.
(no se ha solucionado con MT5(build 2361)) * Error de compilación, error cuando se pasa una estructura interna a una función de plantilla, eltipo de datos resultante no puede utilizarse como tipo de datos base para otra estructura interna en la clase de plantilla.
(no se ha solucionado con MT5(build 2361)) * Error de compilación, error al llamar a una función de plantilla con tipos de argumentos explícitos cuando se llama desde una función no de plantilla sobrecargada.

(no corregido por MT5(build 2361)) Error de compilación, error en la definición de la clase interna - no hay referencia al espacio de nombres global cuando se especifica una clase base.
(no se ha solucionado
con MT5(build 2361)) *** (nuevo) Error de compilación, el principal reclamo a la advertencia de salida inapropiada - "comportamiento obsoleto, la llamada a métodos ocultos se desactivará en una futura versión del compilador MQL".La implementación actual está disparando un cañón sobre un gorrión.
(
no se ha solucionado con MT5(build 2361)) ** (nuevo) Error de compilación, el error se refiere al valor de retorno de una función de plantilla cuando el valor de retorno es una clase interna dentro de una clase de plantilla cuyo tipo de parámetro está definido por el tipo de argumento de la función de plantilla.
(
no se ha solucionado con MT5(build 2361)) * (nuevo)Error de compilación, no se realiza ninguna comprobación de los nombres de tipo de plantilla reutilizados al declarar una función de plantilla dentro de una clase de plantilla, lo que conduce a un comportamiento inesperado.
(
no se ha solucionado con MT5(build 2361)) * (nuevo) Error de Runtimer, en el constructor de la clase base es imposible realizar un typecast explícito en el casting de puntero a objeto de la clase base a puntero a la clase padre.
(
no solucionado por MT5(build 2361)) (nuevo) Error de compilación, múltiples defectos relacionados con la devolución del objeto "creado en el lugar" cuando la clase/estructura de la plantilla es el objeto.


Defectos relacionados con el desajuste de la prioridad de las llamadas para las funciones sobrecargadas en MQL frente a C++:
(no se ha solucionado con MT5(build 2361)) *** Cuando hay herencia de clases A <= B <= C <= D y se implementan dos funciones de sobrecarga, por ejemplo, una con parámetro A* y la segunda con parámetro B*, entonces al pasar en dicha función un objeto C* o D* en MQL se produce un error de compilación "llamada ambigua a función sobrecargada".
(no se ha solucionado con MT5(build 2361)) ** Tiempo de ejecución, desajuste de prioridades en las llamadas a funciones de plantilla sobrecargadas.
(no solucionado por MT5(build 2361)) ** Error de compilación, la prioridad de las llamadas de las funciones de plantilla sobrecargadas depende en realidad del tipo de parámetro de la plantilla, lo que en teoría no debería afectar al resultado de la compilación.
(no se ha solucionado con MT5(build 2361)) ** Aunque existe una función de plantilla sobrecargada con una firma adecuada para los parámetros pasados, se produce un error de compilación al generar el código de la función de plantilla.


Defectos relacionados con la lentitud de ejecución de las funciones, trabajo del optimizador de código:
(no se ha solucionado con MT5(build 2361)) ** (nuevo) Tiempo de ejecución, gran sobrecarga al añadir un elemento a la vez en un array usando ArrayResize, a pesar de que la memoria para ellos ha sido reservada de antemano, por ejemplo, las estructuras son hasta 7 veces más lentas.


Sugerencias:
link- sobre la posibilidad de pasar literales y variables temporales como argumentos de funciones const ref.
enlace- almover los archivos del proyecto en la pestaña "Proyecto", para los archivos movidos que están abiertos y se encuentran en las pestañas ME, para actualizar automáticamente su ruta de ubicación.
link- para introducir la funcionalidad de la declaración typedef en MQL.
link- sobre la posibilidad de forzar la generación de constructores de copia y operadores de asignación por defecto.

 
fxsaber:

El visualizador no siempre muestra el estado actual por razones arquitectónicas.

Alexey Klenov:
Gracias, lo tendré en cuenta.

Se cura ejecutando unos cuantos ticks (F12) después de la pausa.

 
Andrey Khatimlianskii:

Se cura ejecutando unos cuantos ticks (F12) después de la pausa.

Gracias. Lo intentaré.

 
Sergey Dzyublik:

Otro encuentro con el error descrito anteriormente - "Comportamiento indefinido, se crea un objeto complejo envuelto con el tipo interno "C" varias veces, pero resulta ser un tipo de datos completamente diferente, tal vez "B", tal vez "int", lo que quiera...".
De hecho, tardé un día en localizar, reproducir y encontrar soluciones, lamentablemente, todo fue en vano...

Finalmente, conseguí encontrar una solución aceptable.
Resulta que el uso de un miembro de la clase estática proporciona una forma de evitar el error descrito anteriormente:

template<typename _Tp, typename _Opt>
struct It_g{
   class Opt : public _Opt{}; 
   _Tp p;
   
   static Opt opt;
};

template<typename _Tp, typename _Opt>
static It_g::Opt It_g::opt;


template<typename _Tp>
class A_g{
public:
   struct It : public It_g<_Tp, Opt_g<_Tp>>{};
};

template<typename _Tp>
class V{
public:
   struct It : public  A_g<_Tp>::It{};
   It b;
};


template<typename _Tp>
class Opt_g{
   template<typename _It>
   static void test(_It &it){      
      printf(typename(_Tp));          // ClassA*
      printf(typename(it.p));         // ClassA*
      
      _Tp p = it.p;                   // OK
   };
};


template<typename _It>
void test(_It &it){
   it.opt.test(it);
}

class ClassA{};


void OnStart(){ 
   V<int> v1;
   test(v1.b);
   
   V<ClassA*> v2;
   test(v2.b);
   
   V<int>::It it3;
   test(it3);
   
   V<ClassA*>::It it4;
   test(it4);
}
 

¿Cómo puedo solucionar este error de almacenamiento?


Poco a poco se va negando a guardar más y más archivos. Pronto todo lo almacenado será imposible de actualizar.

 

Los beneficios/pérdidas en el tooltip de las órdenes stop de compra y stop de venta se calculan incorrectamente.

Al pasar el ratón por encima de tp

al pasar el ratón por encima del sl