Errores, fallos, preguntas - página 2868

 
Vladimir Simakov:
No, la lógica de los desarrolladores es comprensible, pero para mí, prefiero especificar u'y' explícitamente yo mismo, cuando y si lo necesito

No está claro cómo se vence el tipo de char.

 
Un error de compilación:
void OnStart()
{
        Print(typename( char(0))); //Error: '0' - some operator expected
}

pero de esta manera:

        Print(typename((char)0) ); //нормально

¿Qué diferencia hay?

 
A100:
Error de compilación:

pero de esta manera:

¿Qué diferencia hay?

Parece que sólo "(tipo) valor" es una conversión de tipo, pero "tipo (valor)" es un tipo de inicialización, que en su caso no puede devolver nada. No he abierto μl desde hace mucho tiempo sin embargo ))

 
Alexandr Andreev:

En µl, sólo "(tipo) valor" parece ser una conversión de tipo, pero "tipo (valor)" es un tipo de inicialización, que en su caso no puede devolver nada. No he abierto μl desde hace mucho tiempo sin embargo ))

Así que abrehttps://www.mql5.com/ru/docs/basis/types/casting

Unidad: Conversión de tipos numéricos. "Laconversión explícita de tipos se escribe así"... más adelante en el texto

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Часто возникает необходимость преобразовать один числовой тип в другой. Не каждый числовой тип допустимо преобразовать в другой, допустимые преобразования в MQL5 показаны на схеме: Сплошные линии со стрелками обозначают преобразования, которые выполняются без потери информации. Вместо типа char может выступать тип bool (оба занимают в памяти 1...
 

Sí también lo comprobé, recuerdo haberme encontrado con esto hace tiempo por lo que escribí arriba. Pido disculpas por la información incorrecta).

 
A100:
Error de compilación:

pero de esta manera:

¿Qué diferencia hay?

Sí, esto también es un error de compilación

#define  J '+'          // char

void OnStart()
{
    Print((typename)J);
}
#define  J '+'          // char

void OnStart()
{
    Print((typename)(J));
}
 
Vladimir Simakov:
La lógica de los desarrolladores es bastante clara pero, por mi parte, mejor especificar claramente u'y' cuando y si lo necesito

No entiendo esta lógica. Cuando hay una optimización total por todas partes y la reducción de recursos como prioridad,
por qué hacer el tipo de carácter básico en Unicode aumentándolo a 2 bytes.
De ahí que el tipo de cadena mql resulte caro.
De hecho, sería mejor tener un especificador adicional u'sh'

char por un tipo fantasma sólo para ser sustituido.

#define  J (char)'+'     // char

void OnStart()
{
    Print(J);           // 43
    Print(typename(J)); // char
}

Pero en este caso tenemos una diferencia de tipos.

#define  J '+'              

void OnStart()
{
   Print(J);                // 43
   Print(typename(J));      // ushort
   Print(typename(char));   // char
}

Es un verdadero desastre este Unicode.

 
Roman:

Sí, esto también es un error de compilación.

Tienes un error de sintaxis - danos un ejemplo de código que funcione con (typename) entre paréntesis. También podrías escribir (OnStart) entre paréntesis

 

Otro ejemplo de mensaje dudoso del compilador MQL:

#ifdef __MQL__
void OnStart() {
{
}
#endif //Error: '#endif' - unexpected end of program

¿qué tiene que ver #endif con esto - y cómo se adivina dónde está realmente el error?

en el momento en que C++ informa del error

#ifdef __cplusplus
void OnStart() {
{
} //Error: expected '}' at end of input
#endif
 

Espero que los desarrolladores de mql estén leyendo esta página.

¿Cuándo harán un validador normal?

Hay un error en el validador para mt4. Es imposible obtener datos de precio de apertura/cierre, velas Hi/Low de otros marcos temporales.