class A { public:
int m;
A() { Alert("A"); m=1; }
};
class B { public:
B() { Alert("B"); static A a; Alert("a.m==",a.m); Alert("&a==",&a);}
};
B b;
voidOnStart()
{
};
Quando lo si esegue, si ottiene il seguente ordine di avvisi:
B a.m==0 &a==0 A
Cioè, la variabile statica non è stata ancora inizializzata nel momento in cui si accede ad essa. Anche il puntatore è nullo. È stato appena saltato e si può tranquillamente andare avanti.
O inizializzi la variabile e vai avanti o interrompi la compilazione con un errore.
Ma quando si verifica la ricorsione di classi referenziate reciprocamente, la compilazione dovrebbe essere interrotta.
'??????????????????????????t????...' - l'identificatore è troppo lungo mas.dat 1 1
'' - simbolo sconosciuto mas.dat 1 3015
Il tuo script dovrebbe generare un file mas.mqh, che conterrà un array di uchar-type contenente i byte dei tuoi dati. Per esempio, se il file è di tre byte, il contenuto del file mas.mqh dovrebbe essere il seguente:
uchar mass[3] = {25, 127, 89};
La massa dell'array generato è quello che dovreste usare nel vostro programma.
Non è necessario leggere un file dal disco decine di migliaia di volte, è a questo che serve la cache del disco, anche se non so se viene usata in questo caso particolare, ma si dovrebbe controllare e misurare prima di inventare stampelle.
Grazie mille per la soluzione fornita. Tutto funziona.
Sarebbe molto più veloce leggere l'intero file array in memoria, e poi lavorarci.
Come faccio a collegare un file array al mio EA?
Per prima cosa, lo script scrive un array:
Collego il file nell'EA:
Durante la compilazione, errori:
'??????????????????????????t????...' - l'identificatore è troppo lungo mas.dat 1 1
'' - simbolo sconosciuto mas.dat 1 3015
Gravi bug con le variabili statiche. Considerate questo codice:
Quando lo si esegue, si ottiene il seguente ordine di avvisi:
B
a.m==0
&a==0
A
Cioè, la variabile statica non è stata ancora inizializzata nel momento in cui si accede ad essa. Anche il puntatore è nullo. È stato appena saltato e si può tranquillamente andare avanti.
O inizializzi la variabile e vai avanti o interrompi la compilazione con un errore.
Ma quando si verifica la ricorsione di classi referenziate reciprocamente, la compilazione dovrebbe essere interrotta.
Come faccio a collegare un file array al mio EA?
Per prima cosa, lo script scrive un array:
Collego il file nell'EA:
Durante la compilazione, errori:
'??????????????????????????t????...' - l'identificatore è troppo lungo mas.dat 1 1
'' - simbolo sconosciuto mas.dat 1 3015
Il tuo script dovrebbe generare un file mas.mqh, che conterrà un array di uchar-type contenente i byte dei tuoi dati. Per esempio, se il file è di tre byte, il contenuto del file mas.mqh dovrebbe essere il seguente:
La massa dell'array generato è quello che dovreste usare nel vostro programma.
Non credo che l'ottimizzatore dovrà aprire-leggere-chiudere il file decine di migliaia di volte.
In modalità debug su dati storici, MQLInfoInteger(MQL_VISUAL_MODE) restituisce sempre true.