Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
MqlRates mrate[];//массив нулевого размера
Usate ArrayResize e ArrayInitialize.
Di solito con CopyRates si usa questa struttura.
Renat ha detto che era meglio fare così:
Cerchiamo di capirlo. Per quanto mi ricordo, Renat stava parlando di inizializzare una semplice variabile, non un array. Con battaglie esempi simili sono apparsi nel manuale:
Tu, invece, cerchi di inizializzare un array piuttosto che una semplice variabile quando la dichiari. Ho trovato questo esempio nel Manuale:
L'array qui è inizializzato con un numero finito di valori, e la spiegazione dice che il compilatore determina la dimensione di tale array basandosi sul numero di questi valori. Sono troppo pigro per controllarlo - la dimensione dell'array f[] dell'esempio è molto probabilmente 6.
Nel vostro esempio, la dimensione della sequenza di inizializzazione {0} è 1. Di conseguenza, il compilatore molto probabilmente definirà la dimensione dell'array mrate[] come 1. Qui, per interesse, lo specifichiamo in questo modo:
Causerà un errore?Ero confuso. Swan lo ha spiegato chiaramente. Ho preso la struttura sbagliata. Non ha bisogno di essere inizializzato perché prende dei valori. Dovete inizializzare quelli che danno i loro valori. Mi sbagliavo.
Beh, questa è la cosa principale. La domanda su Renate era interessante di per sé, quindi anche io ho capito qualcosa.
double f[] = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 }; non un array dinamico.
double f[] = { 0,0, 0,236, 0,382, 0,5, 0,618, 1,0 }; array non dinamico.
double f[] è un array dinamico da solo. È questo array che viene dichiarato durante la creazione. Non ho analizzato se smetterà di essere dinamico dopo averlo inizializzato con la sequenza di inizializzazione finita. La cosa principale che avete scoperto sopra è che l'array dichiarato acquisisce una dimensione particolare dopo l'inizializzazione.
Stai dicendo che l'array dinamico nel risultato dell'inizializzazione esplicita smette di essere dinamico, cioè perde il suo stato dinamico e le sue proprietà? - Forse sì, ma ne dubito. Domanda: su quali basi (perché) un array dinamico doppio f[] smette di essere un array dinamico?
double f[] è esso stesso un array dinamico. È dichiarato alla creazione. Non ho indagato se smette di essere dinamico dopo l'inizializzazione da parte della sequenza di inizializzazione finale. La cosa principale che avete scoperto sopra è che l'array dichiarato acquisisce una dimensione particolare dopo l'inizializzazione.
Stai dicendo che l'array dinamico nel risultato dell'inizializzazione esplicita smette di essere dinamico, cioè perde il suo stato dinamico e le sue proprietà? - Forse sì, ma allora la domanda è: perché?
Il punto è che noi in MKL siamo un po' "isolati" dal mondo reale )), il compilatore decide per noi in una tale situazione. Se lo vede:
crea un array statico (senza la possibilità di ridimensionarlo). Se lo vede:
double f[];
crea la struttura struct MqlArrayObject (si comporta come un array dinamico), nella memoria globale. Pertanto, non potete inizializzare un array dopo la dichiarazione (double f[]; f = {6};)
P.S: tutto ciò che è scritto è il mio IMHO, potrei sbagliarmi da qualche parte.
Domanda di uno stupido: è vero che se il compilatore vede la stringa
creerà inizialmente un array statico invece di uno dinamico?
C'è una regola:"Quando si dichiara un array dinamico (un array con un valore non specificato nella prima coppia di parentesi quadre), il compilatore crea automaticamente una variabile struct MqlArrayObject(un oggetto array dinamico) e fornisce il codice per una corretta inizializzazione. O la presenza della sequenza di inizializzazione finale è uguale a "specificare esplicitamente tutte le dimensioni significative dell'array" e porta alla creazione di un array statico?
Domanda di uno stupido: è vero che se il compilatore vede la stringa
creerà inizialmente un array statico invece di uno dinamico?
C'è una regola:"Quando si dichiara un array dinamico (un array con un valore non specificato nella prima coppia di parentesi quadre), il compilatore crea automaticamente una variabile struct MqlArrayObject(un oggetto array dinamico) e fornisce il codice per una corretta inizializzazione. O la presenza della sequenza di inizializzazione finale è uguale a "specificare esplicitamente tutte le dimensioni significative dell'array" e porta alla creazione di un array statico?
È debole controllarlo?
;)
Non puoi controllare?
;)
Al momento è debole. Non arriverò al terminal fino a questa sera. Altrimenti la mia risposta a 220Volt sarebbe suonata diversa, come si capisce :) Non sono riuscito a trovare le informazioni nel Manuale. Forse non stavo cercando abbastanza, ma ero meticoloso.
OK, sono fuori dal terminale. :) Sono anche fuori dal terminale.
Controllato elementare - cercando di usare ArrayResize(...)