Errori, bug, domande - pagina 2720

 
Ancora una volta c'è un problema con avvisi inutili durante la compilazione del codice MT5 (build 2380).
Si prega di considerare la possibilità di disabilitare gli avvertimenti inutili del compilatore per lo sviluppatore:
declaration of 'm_range' hides member   
   in template 'NodeArray<NodeArray<TailArray<int>>>' specified with [T=NodeArray<TailArray<int>>]      
   see previous declaration of 'm_range'        
declaration of 'm_range' hides member
   in template 'NodeArray<NodeArray<NodeArray<TailArray<int>>>>' specified with [T=NodeArray<NodeArray<TailArray<int>>>]
   see previous declaration of 'm_range'

Codice sorgente, prototipo di matrice multidimensionale (C++ online:https://onlinegdb.com/Hk7QjyRdL):
#define  PRINT(x) ; Print(#x, ":", string(x))

template<typename T>
class TailArray{
protected:
   int m_index;
   T data[];
   
protected:
   TailArray(){}   
public:     
   TailArray(int size){
      ArrayResize(data, size);
      m_index = 0;
   };
   
   T value(){
      int index = m_index;
      m_index = 0;
      return data[index];
   }
   const T operator=(const T value){
      data[m_index] = (T)value;
      m_index = 0;
      return value;
   };
};

template<typename T>
class NodeArray : public T{
protected:
   int m_range;
   
protected:
   NodeArray(){}   
public:     
   NodeArray(const NodeArray &src){ this = src;}
   template<typename T_int> NodeArray(T_int count, T_int r1) : T(count * r1), m_range(r1){}
   template<typename T_int> NodeArray(T_int count, T_int r1, T_int r2) : T(count * r1, r2), m_range(r1){}
   template<typename T_int> NodeArray(T_int count, T_int r1, T_int r2, T_int r3) : T(count * r1, r2, r3), m_range(r1){}
   
   T* operator[](int index){
      this.m_index = this.m_index * this.m_range + index;
      return &this;
   }
};


#define  MultiArray(type, size) MultiArray##size(type)
#define  MultiArray2(type) NodeArray<NodeArray<TailArray<type>>>
#define  MultiArray3(type) NodeArray<NodeArray<NodeArray<TailArray<type>>>>


template<typename T>
class MultiArrayCreate{
public:
   static MultiArray(T, 2) Size(int range_1, int range_2){
      return (MultiArray(T, 2)(range_1, range_2, 1));
   }
   static MultiArray(T, 3) Size(int range_1, int range_2, int range_3){  
      return (MultiArray(T, 3)(range_1, range_2, range_3, 1));
   }
};


void OnStart(){
   MultiArray(int, 2) arr_2 = MultiArrayCreate<int>::Size(4, 4);
   MultiArray(int, 3) arr_3 = MultiArrayCreate<int>::Size(4, 4, 4);
   
   arr_2[0][0] = 2233;
   arr_3[3][3][3] = 4455;
   PRINT(arr_2[0][0].value());
   PRINT(arr_3[3][3][3].value());
}
 

Buon pomeriggio a tutti!

Potete dirmi come inserire un'immagine nella descrizione dello script nel progetto e nella successiva pubblicazione in CodeBase?

Ho solo, per qualche motivo, inserire video da Youtube..., ma nessuna icona per inserire un'immagine! :(

Grazie in anticipo! :)

 
gsl17:

Buon pomeriggio a tutti!

Potete dirmi come inserire un'immagine nella descrizione dello script nel progetto e nella successiva pubblicazione in CodeBase?

Ho solo, per qualche motivo, inserire video da Youtube..., ma nessuna icona per inserire un'immagine! :(

Grazie in anticipo! :)

Il pulsante insert pictureIllustrazione del pulsante è disponibile per l'utente a partire da una certa valutazione minima. Ovviamente non hai abbastanza rating per lavorare con il pulsanteIllustrazione del pulsante.

 
Vladimir Karputov:

Il pulsante inserisci immagine è disponibile per l'utente a partire da una certa valutazione minima. Ovviamente non hai un rating sufficiente per usare il pulsante.

Grazie per il chiarimento.

Che peccato...

P.S. Sì, è la prima volta che metto uno script su CodeBase.

 
Bild 2390 mt 5 profiler sulla storia funziona su dati reali no.
 

Difetti nel funzionamento della cache della funzione template/classe:
(risolto da MT5 (build 2390)) ***(up) Undefined Behavior, si crea un oggetto complesso avvolto con tipo interno "C" diverse volte e si scopre che è un tipo di dati completamente diverso, forse "B", forse "int", quello che vuoi...
(risolto da MT5 (build 2390)) * Errore di compilazione, bug sul passaggio di un puntatore di funzione come argomento const ref template.
(risolto da MT5 (build 2390)) * Errore di compilazione, l'oggetto B<int> può essere creato dopo l'oggetto di classe B<void*>, ma si verifica un errore di compilazione se viene fatto prima.


Difetti nella funzione template/classe di lavoro:
(risolto da MT5 (build 2390)) ** Erroredi compilazione, bug nel tentativo di accedere alla classe interna per il parametro template della funzione template.
(risolto da MT5 (build 2390)) **(su) Errore di compilazione, bug all'interno della funzione template, il puntatore passato all'interno dellaconversione esplicita del tipo si comporta come una classe altrimenti come un puntatore.
(non corretto da MT5 (build 2390)) *** Errore di compilazione, l'affermazione principale dell'avviso di output inappropriato è "comportamento deprecato, la chiamata al metodo nascosto sarà disabilitata in una futura versione del compilatore MQL". L'implementazione attuale sta sparando un cannone contro un passero.
(non corretto da MT5 (build 2390)) ** Errore di compilazione, il bug riguarda il valore di ritorno di una funzione template quando il valore di ritorno è una classe interna ad una classe template il cui tipo di parametro è impostato dal tipo di argomento della funzione template.
(non corretto da MT5 (build 2390)) ** Errore di compilazione, spazio dei nomi e bug di ambito nel costruttore di template quando si chiama la classe base quando lo stesso nome di classe è usato nell'ereditarietà e nella classe interna.
(non corretto da MT5 (build 2390)) * Errore di compilazione, bug sulla chiamata della funzione template con tipi di argomento espliciti quando viene chiamata da una funzione non template sovraccaricata.
(non risolto da MT5(build 2390)) Errore di compilazione, bug sulla definizione interna della classe - nessun riferimento allo spazio dei nomi globale quando si definisce una classe base.
(risolto da MT5 (build 2390)) ** Errore di compilazione, bug con la generazione di codice di classe template quando si usa una classe interna.
(risolto da MT5 (build 2390)) ** Errore di compilazione, bug sulla generazione di metodi/classi di template, il processo di sostituzione automatica dei parametri di template va fuori campo nel codice principale del programma.
(risolto da MT5 (build 2390)) * Errore di compilazione, bug con assenza di generazione di codice di classe modello quando la classe modello agisce come valore di ritorno per il metodo modello.
(risolto da MT5 (build 2390)) * Errore di compilazione, bug, quando una struct interna viene passata alla funzione template, iltipo di dati ricevuto non può essere usato come tipo di dati base per un'altra struct interna nella classe template.
(risolto da MT5 (build 2390)) * Errore di compilazione, il controllo dei nomi dei tipi di template riutilizzati non viene eseguito quando si dichiara una funzione template all'interno di una classe template, il che porta a un comportamento inaspettato.
(corretto da MT5(build 2390)) Errore di compilazione, difetti multipli relativi al ritorno dell'oggetto "in luogo creato" quando la classe/struttura del modello è l'oggetto.
(corretto da MT5(build 2368)) *( Non è un bug, è una caratteristica) nel costruttore della classe base è impossibile eseguire un typecast esplicito sul casting del puntatore all'oggetto della classe base nel puntatore alla classe madre.
(non risolto da MT5(build 2390)) (nuovo) Errore di compilazione quando si usa il modificatore di accesso predefinito per l'ereditarietà nella classe template quando il parametro template funge da classe base.
(non corretto da MT5 (build 2390)) * (nuovo) Errore di compilazione, quando si chiama un'istruzione di assegnazione tramite un riferimento esplicito alla classe base. Il problema si verifica per una classe template dove il parametro template agisce come una classe base.


Difetti relativi alla mancata corrispondenza della priorità delle chiamate per le funzioni sovraccaricate in MQL rispetto al C++:
(corretto da MT5 (build 2390)) **(su) Errore di compilazione quando la prima delle funzioni template sovraccaricate usa una classe base template completamente specializzata e la seconda usa una classe base template non specializzata.
(non corretto da MT5 (build 2390)) ** Errore di compilazione, un errore di compilazione si verifica durante la generazione di codice per una funzione template nonostante il fatto che ci sia una funzione template sovraccaricata con una firma adatta ai parametri passati.
(non corretto da MT5 (build 2390)) * Errore di compilazione, "chiamata ambigua a funzione sovraccaricata" quando vengono chiamate funzioni template sovraccaricate con diverso numero di parametri template.
(corretto da MT5 (build 2390)) (corretto da MT5 (build 2390)) **(up) Errore di compilazione, la priorità di chiamata delle funzioni template sovraccaricate dipende effettivamente da un tipo di parametro template che teoricamente non dovrebbe influenzare il risultato della compilazione.
(corretto da MT5 (build 2390)) *** Errore di compilazione quando si ereditano le classi A <= B <= C <= D e si implementano due funzioni di sovraccarico, ad esempio una dal parametro A* e una dal parametro B*, quindi il passaggio di un oggetto C* o D* in tale funzione in MQL causa un errore di compilazione.
(corretto da MT5 (build 2390)) (Corretto da MT5(build 2390). ** Runtime, incoerenza nelle priorità per le chiamate di funzioni template sovraccaricate.
(Corretto da MT5 (build 2390)) *** Runtime, quando si seleziona una funzione sovraccaricata appropriata per un argomento di tipo puntatore, la funzione con conversione del tipo di puntatore al genitore invece della classe base diventa una priorità più alta.
(non corretto da MT5 (build 2390)) *** (nuovo) Errore di compilazione, priorità di chiamata della funzione template sovraccaricata.
(non corretto da MT5 (build 2390)) ** (nuovo) Errore di compilazione, la conversazione di tipo implicito viene utilizzataquando si chiama una funzione per un argomento con tipo di dati colore nonostante ci sia una funzione template overloaded con firma corrispondente con tipo di dati colore.
(non corretto da MT5 (build 2390)) * (nuovo) Errore di compilazione, nonostante la specializzazione esplicita quando viene chiamata la funzione template sovraccaricata, la funzione template viene chiamata comunque di default, il che porta all'overflow dello stack...
(non corretto da MT5 (build 2390)) * (nuovo) CompileError, errore di compilazione quando una funzione viene chiamata attraverso il suo puntatore, quando viene usato un array di puntatori a una funzione.


Difetti relativi a MetaEditor:
(non risolto da ME5 (build 2390)) *** (nuovo) Debugger, il crash del breakpoint nelmetodo della strutturastatica causa il blocco del terminale MT.
(non risolto in ME5 (build 2390)) ** (nuovo) Compilazione, la descrizione dell'errore di compilazione non può rientrare nel limite di 256 caratteri e viene tagliata, quindi è impossibile capire quale errore di tipo di dati si verifica perché la parte necessaria è stata tagliata.
(non risolto in ME5 (build 2390)) ** (nuovo) Debugger, StepInto (F11) e impostare punti di interruzione non funzionano.
(non risolto in ME5 (build 2390)) ** (nuovo) Debuger, dopo l'attivazione di un breakpoint, invece di continuare l'esecuzione del codice premendo (F5), lo stesso breakpoint viene effettivamente attivato di nuovo senza eseguire alcun codice.
(non risolto in ME5 (build 2390)) *(nuovo) Compilazione, firma errata del parametro del modello di funzione nella descrizione dell'errore e nelle informazioni sul parametro.
(non risolto in ME5 (build 2390)) * (nuovo) MetaEditor, la funzionalità Replace (Strl+H) non funziona per l'incluso "In selection" insieme a "Backward direction", quando si seleziona la parte necessaria dell'applicazione, non tutto il codice.


Difetti relativi all'esecuzione lenta delle funzioni, l'ottimizzatore di codice funziona:
(corretto da MT5 (build 2390)) **(up) Runtime, grande overhead quando si aggiunge un elemento alla volta in un array usando ArrayResize, nonostante la memoria sia riservata per loro, ad esempio per le strutture fino a 7 volte più lente.


Suggerimenti:
(nuovo) - aggiungere a ME ricerca/sostituzione per progetto corrente, perché durante il refactoring passare attraverso ogni file e cercare le occorrenze non è in qualche modo buono.
Riferimento(nuovo) - in ME durante la compilazione per riempire le colonne vuote File, Line, Column con le informazioni appropriate sul file sorgente, da cui è stato fatto include.
link- sull'introduzione del supporto intellisense per la funzionalità dello spazio dei nomi basato sul lavoro intellisense per i metodi statici nelle classi.
link- per fornire la possibilità di passare letterali e variabili temporanee come argomenti di funzioni const ref.
link- quandosi spostano i file del progetto nella scheda Progetto, per i file spostati che sono aperti e nelle schede ME, per aggiornare automaticamente il loro percorso.
link- per introdurre la funzionalità della dichiarazione typedef in MQL.
link- circa la possibilità di forzare la generazione di costruttori di copia e operatori di assegnazione predefiniti.

 
È un peccato che ME non mostri i percorsi degli mqh collegabili durante la compilazione, solo i nomi.
 
Quando si mostra la storia del trading nella modalità "Ordini e Contratti" è impossibile ordinare per colonne. A causa di questo, alcuni scambi che hanno appena avuto luogo non vanno alla fine della lista, ma al centro.
 
fxsaber:

Un semplice esempio. Si vuole avere un array di MAU con periodi specificati.

Ogni MAP è un oggetto dello stesso tipo. È chiaro che la MASCHERA è inequivocabilmente specificata dal periodo. Pertanto, è logico renderlo costitutivo.


Altri linguaggi fanno semplicemente un array di puntatori. In MQL, non abbiamo questa libertà.

Sarebbe illogico. Se non hai intenzione di cambiarlo, non significa che devi renderlo costitutivo. È sufficiente rendere la variabile privata.

Sarebbe logico se tu ne ricavassi qualcosa, ma hai solo creato un problema per te stesso.
Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2020.04.21
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
Sergey Dzyublik:

Sapete come sono progettati l'ottimizzatore e il compilatore MQL?
Come potete essere così sicuri che i campi costitutivi dei tipi semplici non siano usati per questo scopo?

L'ottimizzatore non c'entra niente.