Erreurs, bugs, questions - page 1543

 
Slawa:

Lisez les fils jusqu'à la fin

Je vous l'ai déjà dit. Lisez attentivement la documentation, sans sabre à la main.

Lisez TRES attentivement et jusqu'au bout. Votre citation vient de là

Identifiant d'une propriété de l'objet. La valeur peut être l'une des valeurs de l'énumérationENUM_OBJECT_PROPERTY_INTEGER.

Il devrait être

Identifiant de la propriété de l'objet. La valeur DOIT être une des valeurs de l'énumérationENUM_OBJECT_PROPERTY_INTEGER.

La nécessité d'un fantôme explicite pour ce type est confirmée par la seule variante compilée en cinq (vérifiez vous-même). Sans ce fantôme, le compilateur se plaint de l'absence de surcharges correspondantes.

 
Je ne connaissais pas cette astuce. Si vous ouvrez un fichier mq4 dans un cinq méta-éditeur, il sera compilé en ex4 !
 
un compilateur un éditeur
 

Autrement dit, lorsque vous avez fini de le lire, vous avez pensé "La valeur peut être l'une des valeurs de l'énumérationENUM_OBJECT_PROPERTY_INTEGER. Ou peut-être pas. Et ce qui ne peut pas être n'est pas spécifié dans la documentation, donc tout ce qui n'est pas interdit est autorisé. Puisque nous étendons les principes de la vie sociale à la programmation".

Je me demande ce que MetaEditor vous a dit sur le type du paramètre correspondant lorsqu'il a défini les paramètres de cette fonction.

 
Il y a beaucoup d'ambiguïtés dans l'aide MQL. En ce sens, Comp a raison : moins il y a d'interprétations possibles de l'aide, mieux c'est.
 
Slawa:

C'est-à-dire que lorsque vous finissez de le lire, vous pensez "La valeur peut être une des valeurs de l'énumérationENUM_OBJECT_PROPERTY_INTEGER. Ou peut-être pas. Et ce qui ne peut pas être n'est pas spécifié dans la documentation, donc tout ce qui n'est pas interdit est autorisé. Puisque nous étendons les principes de la vie sociale à la programmation".

Non, je ne le pensais pas. Je pensais que si le code se compilait correctement avec MT4, il devrait se compiler correctement avec MT5 également. Quand ça n'a pas marché, j'ai commencé à creuser. Vérifiez le code sur MT4 et sur MT5 et assurez-vous que

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;
  }
};

Je me demande, qu'est-ce que MetaEditor vous a dit sur le type de paramètre pertinent quand il a tapé les paramètres de cette fonction ?

Il l'a corrigé correctement en utilisant les spécifications que j'ai fournies ci-dessus. Dans la documentation, c'est int.

 
comp:

Non, je ne le pensais pas. Je pensais que si le code compilait sans erreur sous MT4, il devrait également compiler sans erreur sous MT5. Quand ça n'a pas marché, j'ai commencé à creuser. Vérifiez le code sur MT4 et sur MT5 et assurez-vous que

Pourquoi ?

MT4 et MT5 ont une architecture fondamentalement différente.

Lors de la traduction de l'ancienne syntaxe de MQL4 vers la nouvelle (appelée MQL4+), nous avons dû revenir à l'ancienne syntaxe de MQL4, à laquelle il manquait beaucoup de choses, notamment les énumérations.

 

comp, on se porte volontaire pour ne lire que pendant une semaine. Soyez un lecteur, pas un écrivain.

Tout ce dont vous parlez ici a été discuté à de nombreuses reprises, non seulement sur ce forum, mais aussi sur MQL4.com.

 
Slawa:

Pourquoi ça ?

MT4 et MT5 ont une architecture différente depuis le début.

Lors de la migration de MQL4 de l'ancienne syntaxe vers la nouvelle (appelée MQL4+), nous avons dû nous pencher sur la syntaxe MQL4 précédente, à laquelle il manquait beaucoup de choses, notamment les énumérations.

On peut argumenter pendant longtemps sans succès. Le fait est que si la documentation n'était pas int, mais comme dans l'astuce lors de la saisie du nom de la fonction, j'aurais immédiatement trouvé la cause de la gronde du compilateur (ce n'était pas évident dans l'exemple avec le template). Parce que selon la documentation, le code aurait dû être compilé comme il y a int et "can". Ce qui m'empêche de faire correspondre la documentation et les infobulles - je ne sais pas. Mais à l'avenir, je me souviendrai qu'en cas de malentendu, il est préférable de regarder ce que les infobulles montrent plutôt que la documentation.
 
Slawa:

comp, on se porte volontaire pour ne lire que pendant une semaine. Soyez un lecteur, pas un écrivain.

Tout ce dont vous parlez ici a été discuté à de nombreuses reprises, non seulement sur ce forum, mais aussi sur MQL4.com.

J'ai demandé à l'origine la raison pour laquelle. Personne ne pouvait répondre. J'ai déjà résolu le problème et posté la solution. J'ai expliqué ce qui a causé la confusion.