Errores, fallos, preguntas - página 2720

 
Una vez más hay un problema de advertencias inútiles al compilar el código de MT5 (build 2380).
Por favor, considere desactivar las advertencias innecesarias del compilador para el desarrollador:
declaration of 'm_range' hides member   
   in template 'NodeArray<NodeArray<TailArray<int>>>' specified with [T=NodeArray<TailArray<int>>]      
   see previous declaration of 'm_range'        
declaration of 'm_range' hides member
   in template 'NodeArray<NodeArray<NodeArray<TailArray<int>>>>' specified with [T=NodeArray<NodeArray<TailArray<int>>>]
   see previous declaration of 'm_range'

Código fuente, Prototipo de matriz multidimensional (C++ en línea:https://onlinegdb.com/Hk7QjyRdL):
#define  PRINT(x) ; Print(#x, ":", string(x))

template<typename T>
class TailArray{
protected:
   int m_index;
   T data[];
   
protected:
   TailArray(){}   
public:     
   TailArray(int size){
      ArrayResize(data, size);
      m_index = 0;
   };
   
   T value(){
      int index = m_index;
      m_index = 0;
      return data[index];
   }
   const T operator=(const T value){
      data[m_index] = (T)value;
      m_index = 0;
      return value;
   };
};

template<typename T>
class NodeArray : public T{
protected:
   int m_range;
   
protected:
   NodeArray(){}   
public:     
   NodeArray(const NodeArray &src){ this = src;}
   template<typename T_int> NodeArray(T_int count, T_int r1) : T(count * r1), m_range(r1){}
   template<typename T_int> NodeArray(T_int count, T_int r1, T_int r2) : T(count * r1, r2), m_range(r1){}
   template<typename T_int> NodeArray(T_int count, T_int r1, T_int r2, T_int r3) : T(count * r1, r2, r3), m_range(r1){}
   
   T* operator[](int index){
      this.m_index = this.m_index * this.m_range + index;
      return &this;
   }
};


#define  MultiArray(type, size) MultiArray##size(type)
#define  MultiArray2(type) NodeArray<NodeArray<TailArray<type>>>
#define  MultiArray3(type) NodeArray<NodeArray<NodeArray<TailArray<type>>>>


template<typename T>
class MultiArrayCreate{
public:
   static MultiArray(T, 2) Size(int range_1, int range_2){
      return (MultiArray(T, 2)(range_1, range_2, 1));
   }
   static MultiArray(T, 3) Size(int range_1, int range_2, int range_3){  
      return (MultiArray(T, 3)(range_1, range_2, range_3, 1));
   }
};


void OnStart(){
   MultiArray(int, 2) arr_2 = MultiArrayCreate<int>::Size(4, 4);
   MultiArray(int, 3) arr_3 = MultiArrayCreate<int>::Size(4, 4, 4);
   
   arr_2[0][0] = 2233;
   arr_3[3][3][3] = 4455;
   PRINT(arr_2[0][0].value());
   PRINT(arr_3[3][3][3].value());
}
 

¡Buenas tardes a todos!

¿Pueden decirme cómo insertar una imagen en la descripción del script en el diseño y posterior publicación en CodeBase?

Sólo tengo, por alguna razón, insertar vídeo de Youtube..., ¡pero ningún icono para insertar una imagen! :(

Gracias de antemano. :)

 
gsl17:

¡Buenas tardes a todos!

¿Pueden decirme cómo insertar una imagen en la descripción del script en el diseño y posterior publicación en CodeBase?

Sólo tengo, por alguna razón, insertar vídeo de Youtube..., ¡pero ningún icono para insertar una imagen! :(

Gracias de antemano. :)

El botón de inserción de imágenesIlustración del botón está disponible para el usuario a partir de una puntuación mínima. Evidentemente, no tienes suficiente puntuación para trabajar con el botónIlustración del botón.

 
Vladimir Karputov:

El botón de inserción de imágenes está disponible para el usuario a partir de una determinada valoración mínima. Evidentemente, no tiene una calificación suficiente para utilizar el botón.

Gracias por la aclaración.

Es una pena...

P.D. Sí, efectivamente, es la primera vez que pongo un script en CodeBase.

 
Bild 2390 mt 5 profiler en la historia trabaja en datos reales no.
 

Defectos en el funcionamiento de la caché de la función/clase de la plantilla:
(arreglado por MT5(build 2390)) ***(arriba) Comportamiento indefinido, creas un objeto complejo envuelto con el tipo interno "C" varias veces y resulta ser un tipo de datos completamente diferente, tal vez "B", tal vez "int", lo que quieras...
(arreglado por MT5(build 2390)) * Error de compilación, error al pasar un puntero de función como argumento de plantilla const ref.
(arreglado por MT5(build 2390)) * 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 la función/clase de la plantilla:
(arreglado por MT5(build 2390)) **(arriba) Error de compilación, error al intentar acceder a la clase interna para el parámetro de plantilla de la función de plantilla.
(arreglado por MT5(build 2390)) **(arriba) Error de compilación, error en la función de plantilla, el puntero pasado dentro de laconversión de tipo explícito se comporta como una clase, de lo contrario como un puntero.
(no se ha solucionado con MT5(build 2390)) *** Error de compilación, el principal reclamo a la advertencia de salida inapropiada es "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 a un gorrión.
(no se ha solucionado con MT5(build 2390)) ** Error de compilación, el fallo afecta 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 es establecido por el tipo de argumento de la función de plantilla.
(no se ha solucionado con MT5(build 2390)) ** Error de compilación, error de espacio de nombres y alcance en el constructor de la plantilla al llamar a una clase base cuando se utiliza el mismo nombre de clase en la herencia y en la clase interna.
(no se ha solucionado con MT5(build 2390)) * Error de compilación, error en la llamada a una función de plantilla con tipos de argumentos explícitos cuando se llama desde una función sobrecargada no de plantilla.
(no corregido por MT5(build 2390)) Error de compilación, error en la definición de la clase interna - no hay referencia al espacio de nombres global cuando se define una clase base.
(arreglado por MT5(build 2390)) ** Error de compilación, error en la generación del código de la clase de la plantilla cuando se utiliza la clase interna.
(arreglado por MT5(build 2390)) ** Error de compilación, error en la generación del método/clase de la plantilla, el proceso de auto sustitución del parámetro de la plantilla se sale del ámbito del código del programa principal.
(arreglado por MT5(build 2390)) * Error de compilación, error con la ausencia de generación de código de clase de plantilla cuando la clase de plantilla actúa como valor de retorno para el método de plantilla.
(arreglado por MT5(build 2390)) * Error de compilación, error, cuando se pasa una estructura interna a una función de plantilla, eltipo de datos recibido no puede ser utilizado como tipo de datos base para otra estructura interna en la clase de plantilla.
(arreglado por MT5(build 2390)) * Error de compilación, la comprobación de los nombres de tipo de plantilla reutilizados no se realiza cuando se declara una función de plantilla dentro de una clase de plantilla, lo que conduce a un comportamiento inesperado.
(corregido por MT5(build 2390)) 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.
(arreglado por MT5(build 2368)) *( No es un bug, es una característica) 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 corregido por MT5(build 2390)) (nuevo) Error de compilación al utilizar el modificador de acceso por defecto para la herencia en la clase de la plantilla cuando el parámetro de la plantilla actúa como clase base.
(no se ha solucionado con MT5(build 2390)) * (nuevo) Error de compilación, cuando se llama a una sentencia de asignación a través de una referencia explícita a la clase base. El problema se produce en el caso de una clase de plantilla en la que el parámetro de la plantilla actúa como clase base.


Defectos relacionados con el desajuste de la prioridad de las llamadas para las funciones sobrecargadas en MQL frente a C++:
(arreglado por MT5(build 2390)) **(arriba) Error de compilación cuando la primera de las funciones de plantilla sobrecargadas utiliza una clase base de plantilla totalmente especializada y la segunda utiliza una clase base de plantilla no especializada.
(no se ha solucionado con MT5(build 2390)) ** Error de compilación, se produce un error de compilación al generar código para una función de plantilla a pesar de que existe una función de plantilla sobrecargada con una firma adecuada para los parámetros pasados.
(no se ha solucionado con MT5(build 2390)) * Error de compilación, "llamada ambigua a función sobrecargada" cuando se llaman funciones de plantilla sobrecargadas con diferente número de parámetros de plantilla.
(arreglado por MT5(build 2390)) (corregido por MT5(build 2390)). **(up) Error de compilación, la prioridad de llamada de las funciones de plantilla sobrecargadas depende en realidad de un tipo de parámetro de plantilla que teóricamente no debería afectar al resultado de la compilación.
(arreglado por MT5(build 2390)) *** Error de compilación cuando se heredan las clases A <= B <= C <= D y se implementan dos funciones de sobrecarga, por ejemplo, una del parámetro A* y otra del parámetro B*, luego al pasar un objeto C* o D* a dicha función en MQL se produce un error de compilación.
(arreglado por MT5(build 2390)) (Corregido por MT5(build 2390). ** Tiempo de ejecución, inconsistencia en las prioridades para las llamadas de funciones de plantilla sobrecargadas.
(Corregido por MT5(build 2390)) *** Runtime, al seleccionar una función sobrecargada adecuada para un argumento de tipo puntero, la función con conversión de tipo a puntero a padre en lugar de a clase base pasa a tener mayor prioridad.
(no se ha solucionado con MT5(build 2390)) *** (nuevo) Error de compilación, prioridades de llamadas a funciones de plantillas sobrecargadas.
(no se ha solucionado con MT5(build 2390)) ** (nuevo) Error de compilación, la conversación de tipos implícita se utilizacuando se llama a una función para un argumento con el tipo de datos color a pesar de que existe una función de plantilla sobrecargada de la firma correspondiente con el tipo de datos color.
(no se ha solucionado con MT5(build 2390)) * (nuevo) Error de compilación, a pesar de la especialización explícita cuando se llama a la función de plantilla sobrecargada, la función de plantilla se llama por defecto de todos modos, que conduce a un desbordamiento de pila...
(no se ha solucionado con MT5(build 2390)) * (nuevo)Error de compilación, error de compilación cuando se llama a una función a través de su puntero, cuando se utiliza una matriz de punteros a una función.


Defectos relacionados con el MetaEditor:
(no se hasolucionado con ME5(build 2390)) *** (nuevo) Depurador, la caída del punto de ruptura en elmétodo de estructuraestática hace que el terminal MT se cuelgue.
(no se ha solucionado en ME5(build 2390)) ** (nuevo) Compilación, la descripción del error de compilación no puede caber en el límite de 256 caracteres y se corta, por lo que es imposible entender qué error de tipo de datos se produce porque la parte necesaria se ha cortado.
(no se ha solucionado en ME5(build 2390)) ** (nuevo) Depurador, StepInto (F11) y establecer puntos de interrupción no funcionan.
(no se ha solucionado en ME5(build 2390)) ** (nuevo) Depurador, después de disparar un punto de ruptura en lugar de continuar la ejecución del código pulsando (F5), se vuelve a disparar el mismo punto de ruptura sin ejecutar ningún código.
(no se ha solucionado en ME5(build 2390)) *(nuevo) Compilación, firma incorrecta del parámetro de la plantilla de funciones en la descripción de errores y en la información de los parámetros.
(no se ha solucionado en ME5(build 2390)) * (nuevo) MetaEditor, la funcionalidad de Reemplazar (Strl+H) no funciona para el incluido "En selección" junto con "Dirección hacia atrás", cuando se selecciona la parte necesaria de la aplicación, no todo el código.


Defectos relacionados con la lentitud en la ejecución de funciones, trabajos de optimización de código:
(arreglado por MT5(build 2390)) **(arriba) 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 está reservada para ellos, por ejemplo, para las estructuras hasta 7 veces más lento.


Sugerencias:
(nuevo) - añadir a ME la búsqueda/reemplazo por el proyecto actual, ya que durante la refactorización recorrer cada uno de los archivos y buscar la ocurrencia no es de alguna manera bueno.
Referencia(nuevo) - en ME cuando se compila para llenar las columnas vacías Archivo, Línea, Columna con la información adecuada sobre el archivo de origen, de la que se hizo incluir.
enlace- sobre la introducción del soporte de intellisense para la funcionalidad del espacio de nombres basado en el trabajo de intellisense para los métodos estáticos en las clases.
link- para proporcionar la capacidad 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 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.

 
Es una pena que ME no muestre las rutas de los mqh enchufables al compilar, sólo los nombres.
 
Cuando se muestra el historial de operaciones en el modo "Órdenes y Operaciones" es imposible ordenar por columnas. Por ello, algunas operaciones que acaban de producirse no van al final de la lista, sino a la mitad.
 
fxsaber:

Un ejemplo sencillo. Se quiere tener una matriz de MAUs con periodos especificados.

Cada MAPA es un objeto del mismo tipo. Está claro que la MÁSCARA se especifica inequívocamente con el punto. Por lo tanto, es lógico hacerla const.


Otros lenguajes simplemente hacen un array de punteros. En MQL, no tenemos esa libertad.

Sería ilógico. Si no vas a cambiarlo, no significa que tengas que hacerlo constar. Basta con que la variable sea privada.

Sería lógico que sacaras algo en claro, pero sólo te has creado un problema.
Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2020.04.21
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
Sergey Dzyublik:

¿Sabes cómo están diseñados el optimizador y el compilador de MQL?
¿Cómo puede estar tan seguro de que los campos const de los tipos simples no se utilizan para este fin?

El optimizador no tiene nada que ver.

Razón de la queja: