Errori, bug, domande - pagina 2416

 
Andrey Pogoreltsev:

Qui non c'è bisogno di ambiguità. Dovrebbe essere semplicemente l'ordine in cui i metodi sovraccaricati vengono applicati. Cioè il compito della soluzione di sovraccarico non è quello di creare un dilemma, ma di scegliere il metodo più adatto. Se ignoriamo il modificatore di accesso, viene preso il primo metodo dalla tabella o dipende dall'implementazione del compilatore, ma non c'è ambiguità.

Ecco cosa succederebbe se ci fossero 2 metodi con diversi parametri di input, per esempio:

Tornando al C++, lo stesso vettore ne ha uno:

Quindi questa è una situazione assolutamente normale.

Hai dato un esempio molto semplice di scuole elementari. Sembra che non abbia niente a che fare con l'esempio originale.


Alexey Navoykov:

In questo esempio è un metodo di un oggetto non costante, quindi deve essere chiamato, a parità di altre condizioni.

Non ero a conoscenza di questa regola, grazie.

Se rimuoviamo il casting e rendiamo l'argomento di tipo int per entrambi i metodi, il codice verrà compilato normalmente. Quindi, è il casting che causa il blocco MQL. Questo casting non deve influenzare il codice poiché è identico.

Sembra che la causa del problema sia che il compilatore non controlla se il casting per i metodi sovraccaricati è identico.

 

In generale, per risolvere questo problema (e molti altri in MQL) è necessario spostare uno dei metodi in una classe ausiliaria:

class A { };

class _B
{
 protected: 
  A _a[];
 public:        
  const A * operator[](uint i) const { return &_a[i]; }  
};

class B : public _B
{
 public: 
  A * operator[](uint i)       { return &_a[i]; }
};
 
fxsaber:

Avete dato un esempio molto semplice di una scuola elementare. Non sembra avere nulla a che fare con l'esempio originale.

Dovresti leggere lo standard C++ per vedere che è tutto risolto dalla stessa regola che ho citato sopra.
 
Slava:

Per cominciare, nella cache di ottimizzazione, sia MT5 che MT4 hanno sempre troncato i parametri delle stringhe a 63 caratteri.

Quando si trasmettono eventi, la stringa non può essere più lunga di 63 caratteri

Quindi ciò che viene da fuori è limitato

Per quanto riguarda i prodotti per gli utenti finali. Il venditore deve considerare le limitazioni. E se non li conosce, non ha testato abbastanza il suo prodotto prima di venderlo

Non si tratta di come era ed è, ma di come dovrebbe essere, se si vuole stare al passo con i tempi e cambiare in meglio.

 

Mi sono imbattuto in questo problema, quando sto testando un EA, dopo aver impostato i parametri e premuto il pulsante di avvio, le impostazioni dell'EA vengono riportate a quelle di default, quale potrebbe essere il problema?

Nel video un esempio

 
Dmitry Melnichenko:

Mi sono imbattuto in questo problema, quando sto testando un EA, dopo aver impostato i parametri e premuto il pulsante di avvio, le impostazioni dell'EA vengono riportate a quelle di default, quale potrebbe essere il problema?

esempio video

MT5 si resetta alle impostazioni predefinite nel tester dopo che si va alla scheda "Impostazioni".

Vedere il post #1.

 

Ho fatto una domanda in un thread vicino, ma non molte persone sembrano guardare lì. Lo duplicherò qui:

https://www.mql5.com/ru/forum/6343/page1020#comment_11112212

In breve: sui futures (nel tester) i trade vengono aperti e chiusi (da SL/TP), ma sempre con profitto zero. Può essere un bug nel tester? O è necessario qualche tipo di trucco?

Вопросы от начинающих MQL5 MT5 MetaTrader 5
Вопросы от начинающих MQL5 MT5 MetaTrader 5
  • 2019.03.26
  • www.mql5.com
Подскажите пожалуйста, такой показатель тестера в жизни реален? И хороший это или плохой результат за год с депо 3000...
 

Bug del compilatore: quando si compila (controllo della sintassi) un file .mqh con questo codice, non viene mostrato alcun errore, ma solo quando si compila l'eseguibile, il che è scomodo.

class A
{
 public: 
  A(int) {  }
};

class B : public A { };  // Здесь должна быть ошибка  'A' - wrong parameters count

B b;
 
Alexey Navoykov:

Bug del compilatore: quando si compila (controllo della sintassi) un file .mqh con tale codice, l'errore non viene generato, ma solo quando si compila il file eseguibile, il che è scomodo.

Perché un heder non si compila in linea di principio :)))

Se si forza l'intero compilatore a compilare un heder, si otterranno molti falsi positivi.

PS. Anche il compilatore C++ non si lamenta se non si usano tali classi.
 
Andrey Pogoreltsev:

Perché un heder non si compila in linea di principio :)))

Se si forza un intero compilatore a compilare un heder, si otterranno molti falsi positivi.

PS. Anche il compilatore C++ non si lamenterà senza usare tali classi.

Sono consapevole che non compila. Sto parlando del controllo della sintassi (che in ME si chiama anche "Compile"), perché l'ho anche specificato tra parentesi in un post precedente. Se si esegue il controllo della sintassi anche nel compilatore C++ (tramite la riga di comando di solito), si sgrida come un tesoro.

Motivazione: