Errori, bug, domande - pagina 1543

 
comp:

Per esempio, nella descrizione di ObjectSetInteger ora

Dovrebbe essere

Leggete tutti gli articoli fino alla fine.

prop_id

[in] Identificatore della proprietà dell'oggetto. Il valore può essere uno dei valori dell'enumerazione ENUM_OBJECT_PROPERTY_INTEGER.

Ve l'ho già detto. Leggete attentamente la documentazione senza una sciabola in mano.
 
Slawa:

Leggete le discussioni fino alla fine

Te l'ho già detto. Leggete attentamente la documentazione, senza una sciabola in mano.

Leggete MOLTO attentamente e fino alla fine. La tua citazione viene da lì

Identificatore di una proprietà dell'oggetto. Il valore può essereuno dei valori dell'enumerazioneENUM_OBJECT_PROPERTY_INTEGER.

Dovrebbe essere

Identificatore della proprietà dell'oggetto. Ilvalore DEVE essere uno dei valori dell'enumerazioneENUM_OBJECT_PROPERTY_INTEGER.

La necessità di un fantasma esplicito a questo tipo è confermata dall'unica variante compilata in cinque (controllate voi stessi). Senza questo fantasma il compilatore si lamenta dell'assenza di sovraccarichi corrispondenti.

 
Non conoscevo questo trucco. Se aprite un file mq4 in un cinque meta-editor, esso verrà compilato in ex4!
 
un compilatore un editor
 

Cioè, quando avete finito di leggerlo, avete pensato "Il valore può essere uno dei valori dell'enumerazioneENUM_OBJECT_PROPERTY_INTEGER. O potrebbe non esserlo. E ciò che non può essere non è specificato nella documentazione, quindi tutto ciò che non è vietato è permesso. Poiché stiamo estendendo i principi della vita sociale alla programmazione".

Mi chiedo, cosa ti ha detto MetaEditor sul tipo del parametro corrispondente quando imposta i parametri di questa funzione?

 
Ci sono molte ambiguità nell'aiuto MQL. Quindi in questo senso comp ha ragione - meno interpretazioni possibili della lettura dell'aiuto, meglio è.
 
Slawa:

Cioè, quando finite di leggerlo, pensate "Il valore può essere uno dei valori dell'enumerazioneENUM_OBJECT_PROPERTY_INTEGER. O potrebbe non esserlo. E ciò che non può essere non è specificato nella documentazione, quindi tutto ciò che non è vietato è permesso. Poiché stiamo estendendo i principi della vita sociale alla programmazione".

No, non lo pensavo. Ho pensato che se il codice ha compilato correttamente con MT4, dovrebbe compilare correttamente anche con MT5. Quando non l'ha fatto, ho iniziato a scavare. Controllate il codice su MT4 e su MT5 e assicuratevi

class CHARTOBJECT
{
public:
  template <typename T>
  void SetProperty( const int id, const T Value, const int Modifier = 0 ) const
  {
    const string sType = typename(T);

    if (sType == "double")
      ::ObjectSetDouble(0, "", id, Modifier, (double)Value);
    else if (sType == "string")
      ::ObjectSetString(0, "", id, Modifier, (string)Value);
    else
      ::ObjectSetInteger(0, "", id, Modifier, (long)Value);

    return;
  } 
  
  virtual void operator =( const string Value ) const
  {
    this.SetProperty(OBJPROP_TEXT, Value);

    return;
  }
};

Mi chiedo, cosa ti ha detto MetaEditor sul tipo di parametro rilevante quando ha digitato i parametri di questa funzione?

L'ha corretto correttamente usando le specifiche che ho fornito sopra. Nella documentazione è int.

 
comp:

No, non lo pensavo. Ho pensato che se il codice ha compilato senza errori sotto MT4, dovrebbe anche compilare senza errori sotto MT5. Quando non l'ha fatto, ho iniziato a scavare. Controlla il codice su MT4 e su MT5 e assicurati che

Perché?

MT4 e MT5 hanno un'architettura intrinsecamente diversa

Durante la migrazione di MQL4 dalla vecchia sintassi alla nuova (ciò che è chiamato MQL4+) abbiamo dovuto guardare indietro alla precedente sintassi MQL4 che aveva un sacco di cose mancanti tra cui le enumerazioni.

 

Comp, offriamoci volontari per leggere solo per una settimana. Sii un lettore, non uno scrittore.

Tutto ciò di cui stai parlando qui è stato discusso molte volte, non solo su questo forum, ma anche su MQL4.com.

 
Slawa:

Perché?

MT4 e MT5 hanno un'architettura diversa dall'inizio

Durante la migrazione di MQL4 dalla vecchia sintassi alla nuova (quella che si chiama MQL4+) abbiamo dovuto guardare indietro alla precedente sintassi MQL4 che aveva un sacco di cose mancanti, incluse le enumerazioni.

Si può discutere a lungo senza successo. Il fatto è che se la documentazione non fosse stata int, ma come nel suggerimento quando si digita il nome della funzione, avrei trovato immediatamente la causa del rimprovero del compilatore (non era ovvio nell'esempio con il template). Perché secondo la documentazione il codice dovrebbe aver compilato come ci int e "può". Cosa mi impedisce di far coincidere la documentazione e i tooltip - non lo so. Ma per il futuro ricorderò che in caso di malintesi è meglio guardare ciò che mostrano i tooltip invece della documentazione.