Errores, fallos, preguntas - página 1354

 

Señores, ¿qué les parecería mejorar significativamente la usabilidad del lenguaje añadiendo lapropiedad: https://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx

El constante baile con setters, getters y brackets es muy molesto.

 
Alexey Navoykov:

Señores, ¿qué les parecería mejorar significativamente la usabilidad del lenguaje añadiendo lapropiedad: https://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx

El constante baile con setters, getters y brackets es muy molesto.

Alexey, estoy a favor, pero deberíamos hacer una votación, no aquí. Aquí hay algunas muletillas, no lo he probado en MQL http://rsdn.ru/article/vcpp/props.xml
Свойства в С++
  • rsdn.org
В этой статье автор рассматривает различные способы реализации свойств в стиле Visual Basic на C++. Некоторые способы специфичны для Visual C++, тогда как другие годятся для применения в любой программе, написанной на языке C++.
 
Alexey Volchanskiy:
Alexey, estoy a favor, pero deberíamos hacer una votación, no aquí. Hay algunas muletillas aquí, no lo he probado en MQL http://rsdn.ru/article/vcpp/props.xml

Hay algo que falla en la codificación de tu enlace, siempre muestra el texto en rojo. Pero sé a lo que te refieres, ya he leído sobre estas muletillas. De momento no es posible implementarlo en MQL, porque no se admite la sobrecarga de operadores fantasma.Pero esta característica nativa en VS es muy útil, especialmente cuando se envuelve en una macro. Y no consume ningún recurso adicional. Así que ya es hora de implementar las propiedades en MQL también, porque todo parece torpe sin ellas.

 
Alexey Volchanskiy:

Lo he resuelto, he encontrado un error en el compilador MQL4. Estuve desatento y tardé 2 días en encontrarlo. La esencia del problema es la siguiente: voy a citar un código sencillo. No obtengo un error de compilación o de deformación, sino un error de ejecución.

    double ptest = double(test); // тут должна быть ошибка компиляции!!! 

Aquí no hay que equivocarse. Aquí hay una clara conversión de tipo. Sería así en VS

  double ptest = (double)(int)(test);
¿Qué diferencia habría?
 
A100:
Aquí no hay que equivocarse. Aquí hay una conversión de tipo explícita.
No se puede lanzar una clase a un tipo significativo, ni siquiera explícitamente. Definitivamente hay un error.
 
Por favor, recuérdame cómo ordenar los símbolos en la ventana de visión general del mercado (MT4, MT5). En un terminal están bien ordenados, en el otro son un desastre. Lo solucioné hace mucho tiempo, no recuerdo cómo lo hice. No hay nada en la documentación al respecto, salvo arrastrar los símbolos uno a uno a un nuevo lugar. Pero no lo he hecho exactamente - es posible ordenar toda la lista manualmente. :-/
 
Vasiliy Sokolov:
No se puede lanzar una clase a un tipo significativo, ni siquiera explícitamente. Definitivamente es un error.

No es una clase, es un puntero, y un puntero es un número.

class A{};
void f()
{
        A *a;
        int i = int(a);
}

C++ compila sin errores

Si desactiva la conversión explícita directa a double, la próxima vez tendrá int en lugar de double con el mismo resultado y el compilador será culpable de nuevo. Hay que distinguir los errores propios de los del compilador.

 
A100:

No es una clase, es un puntero, y un puntero es un número - aprende las matemáticas.

C++ compila sin errores

Si desactiva la conversión explícita directa a double, la próxima vez tendrá int en lugar de double con el mismo resultado y el compilador será culpable de nuevo. Debes distinguir tus propios errores de los del compilador.

No hay ningún puntero allí, porque los punteros no existen en MQL4/5. Hay asas.

----------------------

He recibido una respuesta del Servicio de Atención al Cliente

Equipo de apoyo 2015.08.24 09:44
Gracias por el post, lo arreglaré.
Efectivamente, debe haber un error de compilación aquí.


Equipo de apoyo 2015.08.24 14:39

Estado: Abierto Cerrado
Gracias por el post, arreglado. El compilador dará ahora un error de compilación.
 
Alexey Volchanskiy:

No hay ningún puntero allí, porque no hay punteros en MQL4/5. Hay descriptores.

Un descriptor sigue siendo un número concreto. El hecho de que este número no apunte a una ubicación de memoria específica no lo priva de las propiedades de un número.
 
A100:
Un descriptor sigue siendo un número específico
Por supuesto, en cuanto a "cómo se almacena en la memoria", tienes razón.
Pero no tiene sentido convertir un descriptor en un número o viceversa, y lo más probable es que sea un error en el código.
En un futuro próximo, si se sobrecarga una declaración de conversión adecuada en la clase, se llamará a ésta.
Razón de la queja: