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
Peter, puoi trattarmi come vuoi, è un tuo diritto, ma ascolta il consiglio di un compagno un po' più esperto.
Il fileGUI_DRIVE.mqh è collegato per primo nel codice. Niente è dichiarato prima di esso.
Se lo compilate otterrete un errore di G_CORE mancante, ed è logico perché l'array non è dichiarato in questo file!
Conclusione? Bene, la conclusione è elementare: l'array deve essere dichiarato in questo file. Alla fine, è questo file che opera con questo array, perché questo file è il "motore"! Pertanto, la dichiarazione dell'array stesso in esso è corretta, secondo il contesto d'uso.
Il file successivo,CORES.mqh, riempie l'array con la descrizione degli elementi del modulo.
Naturalmente, quando si compila l'EA stesso con questi file, se l'array è dichiarato nel primo file, non ci saranno problemi di compilazione, perché quando si compila il secondo file, l'array sarà già visibile nel contesto del programma.
Ma quello che stiamo dicendo è che ogni file dovrebbe compilare senza errori. Dato che il secondo file riempie l'array G_CORE con elementi, incontreremo naturalmente un errore durante la compilazione di questo file, se l'array non è dichiarato.
E qui usiamo, come ha detto Alexander, uno stub.
Pyotr, tu sei un grande fan delle definizioni, quindi saprai cosa sta succedendo.
Nel file GUI_DRIVE si dichiara un array globale di elementi del kernel G_CORE, dopo di che il file dovrebbe compilare senza errori.
Poi in questo file si aggiunge una definizione.
#define __DRIVE__
Passate al file Cores. Prima di dichiarare un array, usate il preprocessore di compilazione.
E poi si riempie l'array. Naturalmente, dovrete cambiare un po' il modo in cui riempite l'array, per farlo senza dichiarazione.
Penso che abbiate capito il succo: se il file CORES viene compilato, il default__DRIVE__ non c'è più e il codice della dichiarazione dell'array viene compilato e tutto funziona bene.
Se il file è compilato come parte dell'EA, allora dopo aver compilato il primo file, la define è dichiarata e nel secondo file l'array non è dichiarato perché il compilatore "taglia" questo pezzo di codice.
Spero davvero di essere stato chiaro.
Lo ripeto di nuovo: ogni file deve essere compilato senza errori. Se avete delle dipendenze, dovete prevedere adeguatamente la loro posizione e aggiungere processori di ricompilazione come necessario.
Quando avete ogni file compilato senza errori, avete più fiducia nell'integrità dell'intero sistema.
Inoltre, non dimenticate di aggiungere una proprietà in ogni file:
Questa proprietà dà un controllo più stretto sul codice.
Sì, manipolando il preprocessore si può fare in modo che ogni file venga compilato separatamente senza errori.
Ci sono alcuni compagni che stanno scrivendo un software separato che cambia leggermente l'interfaccia del meta-editor stesso - solo per facilità d'uso!
Questo standard è come usare una tastiera - invece di digitare lettere in codice morse attraverso uno squeaker. Gli stub non cambiano nulla, a parte il continuo sfogliare i file in fase di compilazione. Ma uno stub è 2 righe di codice. Quanto tempo passeremmo su questa navigazione solo per premere un pulsante. E quante volte gireremo 7 e cosa diventerà più razionale per non sprecare le nostre vite digitando lettere attraverso uno squeaker
Notate che non stiamo parlando di oggetti o classi, stiamo solo parlando di risparmiare tempo. Il tuo tempo... E tu stesso puoi trovare uno standard per scriverli.Per non parlare della codifica in russo, che di default è discriminata dall'ambiente di sviluppo in lingua inglese. Dovrei anche adattarmi e lasciare al mio cervello un misero 30% di prestazioni, mentre posso usare tutto il 100% in russo?
I professionisti usano i loro tipi di dati nel loro codice. In generale, non importa in che lingua sono.
Ma se una funzione si aspetta un intero in questo ordine: Accettare (larghezza, altezza).
Invece ci confondiamo accidentalmente e scriviamo
Accept (height, width) - allora il copulatore stesso dice che abbiamo un errore qui. Se funziona per te - non è una questione di lingua o di oggetti. Si tratta solo di non dover cercare questo errore da soli
Nel codice professionale, gli individui usano i propri tipi di dati. Non importa in che lingua sono.
Ma se una funzione si aspetta un intero in questo ordine: Accettare (larghezza, altezza).
Invece ci confondiamo accidentalmente e scriviamo
Accept (height, width) - allora il copulatore stesso dice che abbiamo un errore qui. Se funziona per te - non è una questione di lingua o di oggetti. Si tratta solo di non dover cercare questo errore da soli.
Peter, puoi trattarmi come vuoi, è un tuo diritto, ma accetta il consiglio di un compagno un po' più esperto.
.......
Inoltre non dimenticate di aggiungere una proprietà in ogni file:
Questa proprietà dà un controllo più stretto sul codice.
è per 5 - è sempre lo stesso lì!
anche se in generale sono d'accordo: un sacco di avvertimenti alla compilazione non aumenta la fiducia nel codice.
è fatto per cinque - è sempre rigoroso!
anche se sono d'accordo in generale: un sacco di avvertimenti in fase di compilazione non aumenta la fiducia nel codice.