Errori, bug, domande - pagina 2755
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
Errore del compilatore. Funziona bene nelle vecchie build.
Ho un semplice Expert Advisor (vedi schermata).
Ci sono oggetti Chart sovrapposti al grafico.
Prima dell'aggiornamento del terminale di ieri, i livelli di trading erano mostrati sui grafici, ma ora sono scomparsi.
Ho creato dei grafici come mostrato nell'esempio del manuale. Non ho trovato nessuna proprietà del grafico per visualizzare i livelli di scambio (solo i grafici di base hanno tale proprietà).
Per favore, aiutatemi.
Screenshot della piattaforma MetaTrader
GBPUSD, M5, 2020.05.25
Forex Club International Limited, MetaTrader 5, Real
Ciao. Per favore, aiutatemi a capire ciò che è scritto.
mqlrate rt [2] ;
Ho ragione nel supporre che questo sia un array di due strutture che hanno ricevuto automaticamente gli stessi dati della struttura?
Inoltre non c'è alcuna assegnazione di dati all'array e poi i dati dell'array vengono usati in una volta sola.Ciao. Per favore, aiutatemi a capire ciò che è scritto.
mqlrate rt [2] ;
Ho ragione nel supporre che questo sia un array di due strutture che hanno ricevuto automaticamente gli stessi dati?
Scritto in MQL5:
significa: viene dichiarato un array statico di due struttureMqlRates. Dopo la dichiarazione, queste strutture possono memorizzare cose senza senso, quindi queste strutture devono essere esplicitamente riempite di dati.
Scrivere in MQL5:
significa: viene dichiarata una matrice statica di due struttureMqlRates. Una volta dichiarate, queste strutture possono memorizzare gibberish, quindi queste strutture devono essere esplicitamente riempite di dati.
Errore del compilatore. Funziona bene nelle vecchie build.
Sì, c'è una cosa del genere, riportata già nel 2020.03.25, già giorno per giorno per 2 mesi...
(non risolto da MT5(build 2390)) (nuovo) Errore di compilazione, quando si usa il modificatore di accesso predefinito quando si eredita in una classe template, quando il parametro template funge da classe base.
Un altro bug:
C::operator=, anche se D::operator= viene eseguito qui. Per aggirare il bug, dovete sovraccaricare l'operatore per tutte le classi base nella gerarchia.
p.s. In generale, gli sviluppatori hanno promesso di correggere il comportamento scorretto dell'operatore di assegnazione molto tempo fa, ma è ancora lì. Questo è un oltraggio. Per esempio, il seguente codice si compila senza errori anche se sta assegnando qualcosa:
Un altro bug:
1) Si lamenta di C::operator=, anche se D::operator= viene eseguito qui. Per evitare il bug, dobbiamo sovraccaricare l'operatore per tutte le classi base nella gerarchia.
2) In generale, gli sviluppatori hanno promesso di correggere il comportamento scorretto dell'operatore di assegnazione molto tempo fa, ma è ancora lì - è un oltraggio. Per esempio, il seguente codice si compila senza errori anche se assegna qualsiasi cosa:
1) Questo molto probabilmente non è un bug ma piuttosto un comportamento naturale considerando le specificità di MQL, cioè:
In MQL, i metodi e i campi della classe base sono "direttamente disponibili" dalle classi derivate.
In sostanza, il comportamento dell'ereditarietà in MQL è simile all'uso della dichiarazione per ogni campo e metodo di base in C++.
C++ online:https://onlinegdb.com/rJkckvFsU
Così, tutte le funzioni operator= delle classi base sono anche coinvolte nell'operazioned = c;
quando si cerca la funzione appropriata.
Di conseguenza, la firma ottimale per una chiamata di funzione sovraccaricata è quella predefinita e cancellata void operator=(const C&).
1) Molto probabilmente, non è un bug, ma un comportamento naturale considerando le peculiarità di MQL, cioè:
In MQL, i metodi e i campi di una classe base sono "direttamente disponibili" dalle classi discendenti.
In sostanza, il comportamento dell'ereditarietà in MQL è simile all'uso della dichiarazione per ogni campo e metodo di base in C++.
C++ online:https://onlinegdb.com/rJkckvFsU
Così, l'operazioned = c;
coinvolge anche tutte le funzioni operator= delle classi base quando si cerca la funzione appropriata.
Di conseguenza, la firma ottimale per una chiamata di funzione sovraccaricata è il predefinito e remoto void operator=(const C&).
Non c'è bisogno di cercare un significato sacro in un difetto evidente della lingua. Ho già sollevato questo problema qui e Ilyas ha assicurato che sarà risolto. Ma sono già passati quasi 10 mesi. (
In sostanza, il comportamento dell'ereditarietà in MQL è simile a quello in C++ usando la dichiarazione
Sì, beh, se in MQL per esempio 2 x 2 = 5, si potrebbe dire che è lo stesso che in C++ aggiungendo un'operazione di incremento al risultato)
Non è necessario cercare un significato sacro in un difetto evidente della lingua.
Ti è stato spiegato come e perché funziona, se è difficile per te - per fortuna non posso aiutarti...
Non è un significato sacro, ma un approccio comune per abbassare il livello di input dell'utente, in modo che possa accedere a campi e metodi della classe base senza usare "this.", e anche nei casi di sovraccarico di una funzione della classe base.