![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
1. La funcionalidad de los descendientes no está disponible. No sé quién o cómo, pero personalmente nunca he conseguido acceder a SetRadius() y SetSide() desde el Array.Quizás haya una forma de solucionar el problema con autogenous, pero quiero prescindir de él.
2. Tal vez estoy trabajando incorrectamente con los punteros, pero o bien tengo una fuga todo el tiempo o tengo que golpear los punteros justo en el bloque donde se realiza el trabajo principal.
¿Puedo darle un ejemplo?
Es que el ejemplo que he puesto está sacado de la documentación y no está claro cómo debería funcionar...
Así es como funciona. Pero completamente sin documentación :/ (Pero una vez más he practicado con punteros)
Ejecutar:
puede hacerse de forma mucho más sencilla... virtualización:
No me refiero a eso. No estamos hablando de usar simplemente punteros, estamos hablando de un array de estos punteros con un tipo de clase base.
No importa si es un simple array o un array de punteros, sólo lo que está escrito en la clase base funciona y está disponible.
O quizás me estoy perdiendo algo.
Por ejemplo, una clase base ligeramente modificada (diseñada como una estructura)
Si metemos todo esto en el array, tendremos acceso al menos a la funcionalidad declarada en la clase base.
La pregunta es cómo acceder a la funcionalidad por descendiente si el array es de tipo de clase base (es decir, el array es de tipo CShape).
no es eso de lo que estoy hablando. No estamos hablando de usar simplemente punteros, sino de un array de estos punteros con un tipo de clase base.
La cuestión es cómo acceder a la funcionalidad por parte de un descendiente si el array es de tipo de clase base (es decir, el array es de tipo CShape).He escrito en la última página cómo:
El mismo código, sólo que con un array:
Así es como funciona. Pero completamente fuera de la documentación :/
Ejecutar:
Por algo así:
debería ser arrancado con la confiscación del teclado.
En C++ puedes moverte a través de la jerarquía de clases con dynamic_cast, y ahí tampoco te gusta. En MQL, puede provocar fallos implícitos que no se pueden resolver fácilmente, porque el fallo está en un lugar completamente diferente.
Por lo tanto, desaconsejo encarecidamente el uso de este tipo de conversión. Es decir, en absoluto. A los ancestros por favor, a los niños ni.
Por algo así:
deberían quitarte las manos y confiscarte el teclado.
En C++, puedes moverte a través de la jerarquía de clases usando dynamic_cast, y tampoco te gusta allí. En MQL puede provocar fallos implícitos que no se pueden resolver fácilmente, porque el fallo está en un lugar completamente diferente.
Por lo tanto, desaconsejo categóricamente el uso de dicha conversión. Es decir, en absoluto. A los ancestros por favor, no a los niños.
¿Cuál es la forma educada de responder? ....
Si el programador es demasiado tonto, una simple operación de 1+1 puede provocar choques implícitos....
Y quiero señalar que MQL5 no es C++...
Esto es sólo una posibilidad, no una cuestión de aplicación....
El mismo código, sólo que con un array:
1. Quita m_radio() del ancestro, no está en el ejemplo. :) Y no conseguirás trabajar con él en OnStart();
2. ¿se puede trasladar la línea de borrado de Base[0] a otro lugar? Digamos que si no es un script sino un búho y todavía necesito los datos del array.
Tengo fugas de memoria de inmediato. Tuve que cambiar a estructuras por esta razón...
1. Eliminar m_radio(), no está presente en el ejemplo. Y no se consigue trabajar con él en OnStart();
2. ¿puedo mover la línea de eliminación de Base[0] a otro lugar? Digamos que si no es un script sino un búho, y todavía necesito los datos del array.
Tengo una fuga de memoria de inmediato. Tuve que cambiar a estructuras por esta razón...
1) Eliminado, funciona:
2) Lo principal es borrarlo antes de que termine el programa... Pero si tienes este puntero creado en una función, tienes que ocuparte de guardarlo en una ubicación global...