Errores, fallos, preguntas - página 2952

 
Alexey Rassvetnyy:

Por favor, arregle este error. MQL5 no permite utilizar algunos enums incorporados como parámetros genéricos, por ejemplo: ENUM_CHART_PROPERTY_DOUBLE, ENUM_CHART_PROPERTY_STRING.

No hay problema con los enum personalizados y otros incrustados.

El problema surge porque el enum no tiene un elemento con valor cero. He conseguido crear mi propio enum que genera este error de compilación.

#include <Generic\HashMap.mqh>
enum TEST_ENUM {
   ENUM1, ENUM2
};
enum TEST_ENUM2 { //отсутствует элемент с номером 0
   ENUM1=-10, ENUM2
};
void OnStart()
  {
   CHashMap<ENUM_CHART_PROPERTY_INTEGER,int> mapI;    // эта срока комилируется без ошибок
   CHashMap<ENUM_CHART_PROPERTY_DOUBLE,double> mapD;  // здесь ошибки компиляции: 'NULL' - cannot convert enum  HashMap.mqh     21      39. 'NULL' - cannot convert enum        HashMap.mqh     462     30
   CHashMap<ENUM_CHART_PROPERTY_STRING,string> mapS;  // здесь ошибки компиляции: 'NULL' - cannot convert enum  HashMap.mqh     21      39. 'NULL' - cannot convert enum        HashMap.mqh     462     30
   CHashMap<TEST_ENUM,double> mapE;    // эта срока комилируется без ошибок
   CHashMap<TEST_ENUM2,double> mapE2;    // здесь ошибки компиляции: 'NULL' - cannot convert enum       HashMap.mqh     21      39. 'NULL' - cannot convert enum        HashMap.mqh     462     30
  }
 
Alexey Rassvetnyy:

El problema se produce porque el enum no contiene un elemento con valor nulo. Hemos conseguido crear nuestro propio enum, que genera este error de compilación.

En tu caso, arreglar el archivo de la biblioteca ayudará

//+------------------------------------------------------------------+
//| fix HashMap.mqh                                                  |
//|  line 21  | was | Entry(void): key(NULL) {}                      |
//|           | now | Entry(void): key((TKey)NULL) {}                |
//|  line 462 | was | m_entries[i].key=NULL;                         |
//|           | now | m_entries[i].key=(TKey)NULL;                   |
//+------------------------------------------------------------------+
 
DMITRII PECHERITSA:

En tu caso, arreglar el archivo de la biblioteca ayudará

Gracias, funciona.

Sin embargo, si corrijo a mano un archivo que soporta MQ, la siguiente actualización revertirá mis cambios. Necesitamos que los desarrolladores que apoyan la biblioteca estándar hagan el casteo de NULL a tipos paramétricos en todo el código de la biblioteca estándar o que ajusten el compilador para hacer que NULL pueda castear automáticamente a cualquier tipo sin instrucciones explícitas.

 
Alexey Rassvetnyy:

Los desarrolladores que soportan la biblioteca estándar deben lanzar NULL a tipos paramétricos en todo el código de la biblioteca estándar o ajustar el compilador para hacer que NULL se lance automáticamente a cualquier tipo sin instrucciones explícitas.

Los desarrolladores tienen un principio: cuanto más sencillo, mejor. Bueno, no es ensamblador, así que puedes usarlo. Tal vez así es como debería ser.

 
DMITRII PECHERITSA:

En tu caso, arreglar el archivo de la biblioteca ayudará

Gracias por su mensaje.

Se han hecho estas correcciones en el SB

 
Ilyas:

Gracias por su mensaje.

Se han hecho estas correcciones en el SB

¿Corregido no sólo para las claves sino también para los valores?

 
Stanislav Korotky:

¿Corregido no sólo para las claves sino también para los valores?

Sí, también para los valores

 
Ilyas:

¿Es posible que el depurador, al mostrar el contenido de una estructura, pueda eliminar algunos de sus campos de los observados?


Hay varias estructuras grandes. Tienes que compararlos por cinco campos con tus ojos. No funciona.

 

Buenos días, por favor ayúdenme a resolver este problema.

Antes de enviar y comprobar una solicitud de operación en MT5-advisor utilizo la siguiente variante de definición detype_filling:

// тип FILLING
int SYMBOL_FILLING = (int)SymbolInfoInteger(iNameSymbol, SYMBOL_FILLING_MODE);
switch(SYMBOL_FILLING)
{
   case SYMBOL_FILLING_FOK:   iЗапрос.type_filling = ORDER_FILLING_FOK;    break;
   case SYMBOL_FILLING_IOC:   iЗапрос.type_filling = ORDER_FILLING_IOC;    break;
   default:                   iЗапрос.type_filling = ORDER_FILLING_RETURN; break;
}

Pero me encuentro con el hecho de que esta construcción resulta que no funciona en todas las cuentas y no para todos los corredores, y después de comprobar una solicitud lista a través de OrderCheck, aparece el error 10030 (Se especifica un tipo de ejecución de orden no soportado por el balance). En este caso SYMBOL_FILLING = 3, y se selecciona el tipo ORDER_FILLING_RETURN.

No utilizo ninguna biblioteca externa (como CTrade). Por favor, ayúdenme o indíqueme dónde puedo obtener la respuesta a mi pregunta.

Gracias de antemano.

 
fxsaber:

¿Es posible que el depurador, al mostrar el contenido de una estructura, pueda eliminar algunos de sus campos de los observados?


Hay varias estructuras grandes. Tienes que compararlos por cinco campos con tus ojos. No funciona.

La mejor manera es mostrar el valor de cualquier variable al pasar el ratón por encima de la fuente - por lo que no es necesario añadir nada a la lista de vigilancia y el campode cualquier anidación está disponible sin una cadena de desreferenciación (y los campos vecinos).