Erreurs, bugs, questions - page 1354

 
Alexey Navoykov:

Messieurs, que diriez-vous d'améliorer considérablement la convivialité de la langue en ajoutant lapropriété : https://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx.

La danse constante avec les setters, getters et parenthèses est très ennuyeuse.

Alexey, je suis tout à fait pour, mais nous devrions faire un vote, pas ici. Voici quelques béquilles, je ne l'ai pas essayé dans MQL http://rsdn.ru/article/vcpp/props.xml
Свойства в С++
  • rsdn.org
В этой статье автор рассматривает различные способы реализации свойств в стиле Visual Basic на C++. Некоторые способы специфичны для Visual C++, тогда как другие годятся для применения в любой программе, написанной на языке C++.
 
Alexey Volchanskiy:
Alexey, je suis tout à fait pour, mais nous devrions faire un vote, pas ici. Il y a quelques béquilles ici, je ne l'ai pas essayé dans MQL http://rsdn.ru/article/vcpp/props.xml.

Il y a quelque chose qui ne va pas avec l'encodage de votre lien, il affiche toujours du texte en rouge. Mais je sais ce que vous voulez dire, j'ai déjà lu ces béquilles auparavant. Il n'est pas possible de l'implémenter dans MQL pour le moment, parce que la surcharge des opérateurs fantômes n'est pas supportée.Mais cette fonctionnalité native de VS est très utile, surtout lorsqu'elle est intégrée dans une macro. Et elle ne consomme pas de ressources supplémentaires. Il est donc grand temps d'implémenter les propriétés dans MQL aussi, car tout semble maladroit sans elles.

 
Alexey Volchanskiy:

J'ai compris, j'ai trouvé un bug dans le compilateur MQL4. J'étais inattentif et il m'a fallu 2 jours pour le trouver. L'essence du problème est la suivante : je vais vous donner le code le plus simple. Je n'obtiens pas d'erreur de compilation ou de déformation, mais une erreur d'exécution.

    double ptest = double(test); // тут должна быть ошибка компиляции!!! 

Il n'y a pas besoin de faire d'erreur ici. Il y a une nette conversion de type ici. Ce serait comme ça en VS

  double ptest = (double)(int)(test);
Quelle différence cela ferait-il ?
 
A100:
Il n'y a pas besoin de faire d'erreur ici. Il y a une conversion de type explicite ici.
Vous ne pouvez pas convertir une classe en un type significatif, même explicitement. Il y a bien une erreur.
 
Veuillez me rappeler comment trier les symboles dans la fenêtre d'aperçu du marché (MT4, MT5). Sur un terminal, ils sont bien triés, sur l'autre, c'est le bazar. Je l'ai réglé il y a longtemps - je ne me souviens plus comment j'ai fait. Il n'y a rien dans la documentation à ce sujet, sauf pour faire glisser les symboles un par un vers un nouvel emplacement. Mais je ne l'ai pas fait exactement - il est possible de trier toute la liste manuellement. :-/
 
Vasiliy Sokolov:
Vous ne pouvez pas convertir une classe en un type significatif, même explicitement. Il s'agit bien d'une erreur.

Ce n'est pas une classe, c'est un pointeur, et un pointeur est un nombre.

class A{};
void f()
{
        A *a;
        int i = int(a);
}

C++ se compile sans erreur

Si vous désactivez la conversion explicite directe en double, la fois suivante, il y aura int au lieu de double avec le même résultat et le compilateur sera à nouveau coupable. Vous devez distinguer vos propres erreurs des erreurs du compilateur.

 
A100:

Ce n'est pas une classe, c'est un pointeur, et un pointeur est un nombre - apprenez les mathématiques.

C++ se compile sans erreur

Si vous désactivez la conversion explicite directe en double, la fois suivante, il y aura int au lieu de double avec le même résultat et le compilateur sera à nouveau coupable. Vous devez distinguer vos propres erreurs des erreurs du compilateur.

Il n'y a pas de pointeur ici, car les pointeurs n'existent pas dans MQL4/5. Il y a des poignées.

----------------------

J'ai reçu une réponse du Service Desk

Équipe de soutien 2015.08.24 09:44
Merci pour le post, je vais le corriger.
En effet, il doit y avoir une erreur de compilation ici.


Équipe de soutien 2015.08.24 14:39

Statut : Ouvert Fermé
Merci pour le post, corrigé. Le compilateur va maintenant donner une erreur de compilation.
 
Alexey Volchanskiy:

Il n'y a pas de pointeur ici, car il n'y a pas de pointeur dans MQL4/5. Il y a des descripteurs.

Un descripteur est toujours un numéro spécifique. Le fait que ce nombre ne pointe pas vers un emplacement mémoire spécifique ne le prive pas des propriétés d'un nombre.
 
A100:
Un descripteur est toujours un numéro spécifique
Bien sûr, en termes de "comment c'est stocké dans la mémoire", vous avez raison.
Mais cela n'a aucun sens de convertir un descripteur en un nombre ou vice versa, et il s'agit très probablement d'un bug dans le code.
Dans un avenir proche, si une instruction de conversion appropriée est surchargée dans la classe, elle sera appelée.
 
Ilyas:

Dans un avenir proche, si une instruction de conversion appropriée est surchargée dans une classe, elle sera appelée.

Mmmm, miam... Très bonne nouvelle.