Imparare e scrivere insieme in MQL5 - pagina 33

 

Dobbiamo spostare l'inizializzazione nella lista di inizializzazione.

Solo le costanti integrali statiche possono essere inizializzate nella dichiarazione (almeno in C++, non so ancora in MQL5 :) )

 
Un'altra domanda, l'ultima. Per quale motivo "" e NULL per le stringhe non sono equivalenti?
 
Interesting:

A proposito di uccelli.

E cosa risponderà il compilatore a questo? E risponderà a quanto segue '=' - uso illegale dell'assegnazione

Il compilatore era indomito - '=' - uso illegale dell'assegnazione.

Ho una domanda: cosa succede se il programmatore (in questo caso, io) non inizializza le variabili prima di usarle (fa quello che richiede il compilatore e omette questo momento nel costruttore)?


Il modo giusto di inizializzare i membri delle strutture/classi nel costruttore/i:

//Struct StrMQL4_Deal
struct StrMQL4_Deal
{
//----------------------------------------------------------------------------//
double TP;
double SL;
//----------------------------------------------------------------------------//
StrMQL4_Deal():TP(0),SL(0) { }
StrMQL4_Deal(double  tp,double  sl):TP(tp),SL(sl) { }
};
 
TheXpert:
Un'altra domanda, l'ultima. Per quale motivo "" e NULL per le stringhe non sono equivalenti?
NULL significa che la stringa non è allocata e "" la stringa è allocata e ha un valore.
 
mql5:

inizializzare correttamente i membri della struttura/classe nel/i costruttore/i:

Sì, me ne sono reso conto più di un anno fa, almeno dal 2010.
 
Interesting:
Sì, l'ho capito più di un anno fa, almeno dal 2010 faccio così.

Non puoi averlo fatto correttamente dal 2010, perché la lista di inizializzazione è stata introdotta abbastanza recentemente :) .

mql5:

NULL significa che la stringa non è allocata e "" la stringa è allocata e ha un valore.

Ok, la metterò in un altro modo. Che senso ha inserire lo stato di stringa "non distribuito" per l'utente? Può essere usato in qualche modo utile o è solo una stampella?
 
TheXpert:
Non puoi averlo fatto bene dal 2010, dato che la lista di inizializzazione è stata introdotta solo di recente :) .
nel costruttore.
 
TheXpert:

Non puoi averlo fatto bene dal 2010, dato che la lista di inizializzazione è stata introdotta abbastanza recentemente :) .


Intendevo l'inizializzazione nel costruttore della classe e la dichiarazione come

//----------------------------------------------------------------------------//
double TP;
double SL;
//----------------------------------------------------------------------------//
Non ricordo esattamente, ma ho iniziato a lavorare con gli oggetti all'inizio del 2010 (primo trimestre, non posso dire esattamente; ed è noioso cercare le fonti). Prima avevo a che fare con le librerie e studiavo le basi di MQL5 (o meglio, mi occupavo dei problemi di migrazione di MQL5).
 
Rosh:
Fare una funzione di sovraccarico su diversi tipi di dati nell'array.
Ops, capito. Quindi, non c'è un modo universale. La domanda è sorta perché l'overloading porta a funzioni identiche con una sola(!) differenza - nell'intestazione della funzione, quando si deve specificare un tipo di array. Non è esattamente pulito, ma cosa posso fare, lo lascerò così. Speravo ci fosse una via d'uscita, come nel Manuale di riferimento.
 

Un semplice script come questo mi dà strani risultati

void OnStart()
  {
   for(uchar u=120;u<136;u++)
     {
       switch(u>254)
        {
          case  true: Print(u,">254 - true");  break;
          case false: Print(u,">254 - false"); break;
        }
     }
  }

Forse qualcuno può spiegare qual è la ragione? Quando il numero 254 è esplicitamente convertito in uchar, funziona come previsto.