![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
MqlRates mrate[];//массив нулевого размера
Utilice ArrayResize y ArrayInitialize.
Normalmente con CopyRates se utiliza esta estructura.
Renat dijo que era mejor hacerlo así:
Intentemos resolverlo. Que yo recuerde, Renat hablaba de inicializar una variable simple, no un array. Con las batallas aparecieron ejemplos similares en el Manual:
Tú, por el contrario, al declararlo estás tratando de inicializar un array, no una simple variable. Encontré este ejemplo en el Manual:
El array aquí se inicializa con un número finito de valores, y la explicación dice que el compilador determina el tamaño de dicho array basándose en el número de estos valores. Me da pereza comprobarlo - el tamaño del array f[] del ejemplo es muy probable que sea 6.
En su ejemplo, el tamaño de la secuencia de inicialización {0} es 1. En consecuencia, lo más probable es que el compilador defina el tamaño del array mrate[] como 1. Aquí, por el interés, se especifica de esta manera:
¿Causará un error?Estaba confundido. Swan lo explicó claramente. Tomé la estructura equivocada. No necesita ser inicializado en absoluto porque toma valores. Hay que inicializar los que dan sus valores. Me equivoqué.
Bueno, eso es lo principal. La pregunta sobre Renate era interesante en sí misma, así que también me imaginé algo.
double f[] = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 }; no es un array dinámico.
double f[] = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 }; array no dinámico.
double f[] es un array dinámico por sí mismo. Esta matriz es la que se declara durante la creación. No he analizado si dejará de ser dinámico después de inicializarlo con la secuencia de inicialización finita. Lo principal que has descubierto arriba es que el array declarado adquiere un tamaño determinado después de la inicialización.
¿Estás diciendo que el array dinámico en el resultado de una inicialización explícita deja de ser dinámico, es decir, pierde su estado y propiedades dinámicas? - Puede que sí, pero lo dudo. Pregunta: ¿en qué se basa (por qué) que un array dinámico doble f[] deje de ser un array dinámico?
double f[] es a su vez un array dinámico. Se declara en la creación. No he investigado si deja de ser dinámico después de la inicialización por la secuencia final de inicialización. Lo principal que has descubierto arriba es que el array declarado adquiere un tamaño determinado después de la inicialización.
¿Estás diciendo que el array dinámico en el resultado de la inicialización explícita deja de ser dinámico, es decir, pierde su estado y propiedades dinámicas? - Puede que sí. Entonces la pregunta es: ¿por qué?
La cuestión es que en MKL estamos un poco "aislados" del mundo real)), el compilador decide por nosotros en tal situación. Si lo ve:
crea un array estático (sin posibilidad de redimensionarlo). Si lo ve:
double f[];
crea la estructura MqlArrayObject (se comporta como un array dinámico), en la memoria global. Por lo tanto, no se puede inicializar un array después de la declaración (double f[]; f = {6};)
P.D: todo lo escrito es mi IMHO, puedo estar equivocado en algún punto.
Pregunta de un tonto: ¿Es cierto que si el compilador ve la cadena
¿creará inicialmente una matriz estática en lugar de una dinámica?
Existe una regla:"Al declarar un array dinámico (un array con un valor no especificado en el primer par de corchetes), el compilador crea automáticamente una variable struct MqlArrayObject(un objeto de array dinámico) y proporciona código para su correcta inicialización. ¿O la presencia de la secuencia de inicialización final equivale a "especificar explícitamente todas las dimensiones significativas del array" y conduce a la creación de un array estático?
Pregunta de un tonto: ¿Es cierto que si el compilador ve la cadena
¿creará inicialmente una matriz estática en lugar de una dinámica?
Existe una regla:"Al declarar un array dinámico (un array con un valor no especificado en el primer par de corchetes), el compilador crea automáticamente una variable struct MqlArrayObject(un objeto de array dinámico) y proporciona código para su correcta inicialización. ¿O la presencia de la secuencia de inicialización final equivale a "especificar explícitamente todas las dimensiones significativas del array" y conduce a la creación de un array estático?
¿Es débil para comprobarlo?
;)
¿No crees que deberías comprobarlo?
;)
Por el momento, es débil. No llegaré a la terminal hasta esta noche. De lo contrario, mi respuesta a 220Volt habría sonado diferente, como comprenderás :) No he podido encontrar la información en el Manual. Tal vez no estaba buscando lo suficiente, pero estaba siendo meticuloso.
Bien, estoy fuera de la terminal. :) Yo también estoy fuera de la terminal.
Comprobado elemental - tratando de utilizar ArrayResize(...)