Erreurs, bugs, questions - page 2661
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Je m'excuse d'avoir simplifié le code au maximum, introduisant par là même certaines imprécisions, notamment :
- les objets passés à la fonction ont la même taille (code mis à jour) ;
- au lieu d'une sortie muette printf("1");/printf("2") ; on accède en fait directement à l'interface ou aux internes de l'objet, ce qui ne permet pas de mettre en ligne deux algorithmes dans une seule fonction d'appel (code mis à jour).
Ou comme ça :
elle n'est pas idéale car elle nécessite des changements dans la structure des objets utilisés et entache la logique, mais elle fonctionne.
Et oui, il est préférable de créer une fonction d'encapsulation au-dessus de test :
. Ensuite, recherchez tous les appels dans le projet:
En tout cas, merci beaucoup pour votre aide.
Merci pour la solution,
Ce n'est pas l'idéal car cela nécessite de modifier la structure des objets utilisés et entache la logique, mais cela fonctionne.
Et oui, il est préférable de créer une fonction wrapper sur test :
plutôt que de rechercher tous les appels dans le projet :
En tout cas, merci beaucoup pour votre aide.
Oui, je suis d'accord.
Défauts dans le fonctionnement de la fonction template/class cache :
(non corrigé par MT5(build 2345)) ** Comportement indéfini, vous créez un objet complexe enveloppé avec le type interne "C" plusieurs fois et il s'avère être un type de données complètement différent, peut-être "B", peut-être "int", ce que vous voulez...
(non corrigé par MT5(build 2345)) * Erreur de compilation, bug sur le passage d'un pointeur de fonction comme argument de modèle const ref.
(non corrigé par MT5(build 2345)) * Erreur de compilation, l'objet B<int> peut être créé après l'objet de la classe B<void*>, mais une erreur de compilation se produit si cela est fait avant.
Défauts dans la fonction de modèle/travail de classe :
(non corrigé par MT5(build 2345)) ** Erreur de compilation, bug à l'intérieur d'une fonction template, le pointeur passé dans une opération deconversion de type explicite se comporte comme une classe, sinon comme un pointeur.
(non corrigé par MT5(build 2345)) ** Erreur de compilation, bogue avec la génération de code de classe modèle lors de l'utilisation de classe interne.
(non corrigé par MT5(build 2345)) ** Erreur de compilation, bogue lors de la tentative d'accès à une classe interne pour un paramètre de modèle de fonction de modèle.
(non corrigé par MT5(build 2345)) ** Erreur de compilation : lors de la génération d'une méthode ou d'une classe de modèle, le processus d'"autocomplétion" du paramètre de modèle sort du champ d'application pour entrer dans le code du programme principal.
(non corrigé par MT5(build 2345)) * Erreur de compilation, bogue lié à l'absence de génération automatique du code de la classe du modèle lorsque celle-ci agit comme valeur de retour de la méthode du modèle.
(non corrigé par MT5(build 2345)) * Erreur de compilation, bogue dans la définition de la classe interne - pas de référence à l'espace de noms global lors de la définition d'une classe de base.
(non corrigé par MT5(build 2345)) *(nouveau) Erreur de compilation, bug dans le passage d'une structure interne à une fonction template, letype de données résultant ne peut pas être utilisé comme type de données de base pour une autre structure interne dans la classe template.
(non corrigé par MT5(build 2345)) *(nouveau) Erreur de compilation, un bogue lors de l'appel d'une fonction modèle avec des types d'arguments explicites lorsqu'elle est appelée depuis une fonction non modèle surchargée.
Défauts dans le décalage de la priorité des appels de fonctions surchargées dans MQL par rapport à C++ :
(non corrigé par MT5(build 2345)) *** Erreur de compilation lorsqu'il y a un héritage de classe A <= B <= C <= D et que deux fonctions de surcharge sont implémentées, par exemple, une avec le paramètre A* et une avec le paramètre B*, alors passer dans une telle fonction un objet C* ou D* dans MQL provoque une erreur de compilation "appel ambigu à une fonction surchargée".
(non corrigé par MT5(build 2345)) ** Runtime, incompatibilité de priorité pour les appels de fonctions de modèle surchargées.
(non corrigé par MT5(build 2345)) **(nouveau) Erreur de compilation, la priorité des appels de fonctions template surchargées dépend en fait du type de paramètre template, ce qui théoriquement ne devrait pas affecter le résultat de la compilation.
(non corrigé par MT5(build 2345)) **(new) Compile Error, une erreur de compilation se produit lors de la génération du code d'une fonction template malgré le fait qu'il existe une fonction template surchargée avec une signature appropriée pour les paramètres passés.
Suggestions :
ref- permet de passer des littéraux et des variables temporaires comme arguments const ref à une fonction.
lien- lors dudéplacement de fichiers de projet dans l'onglet Projet, pour les fichiers déplacés qui sont ouverts et dans les onglets ME, pour mettre automatiquement à jour leur chemin d'accès.
link- pour introduire la fonctionnalité de déclaration de typedef dans MQL.
lien- sur la possibilité de forcer la génération de constructeurs de copie et d'opérateurs d'affectation par défaut.
Sergey Dzyublik:
Спасибо за вариант решения
le lien est une copie temporaire, donc vous ne pouvez pas modifier la structure
La référence est une copie temporaire, donc vous ne pouvez pas changer la structure.
Vous avez raison dans le cas général...
Mais dans certains cas particuliers, c'est beaucoup plus compliqué et en fait, les structures données sont des itérateurs et ce n'est pas leur contenu qui est modifié, mais les objets auxquels ils font référence.
Le problème est donc résolu dans ce cas particulier et je vous en suis reconnaissant.
Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading
Bugs, bugs, questions
Sergey Dzyublik, 2020.03.01 12:53
Si je comprends bien, cette fonction renverra le pointeur vers l'objet qui n'existe pas ?
Ai-je bien compris que cette fonction renverra un pointeur vers un objet inexistant ?
Oui, dans cet exemple, la fonction renverra un pointeur vers un objet inexistant.
L'objectif principal de ce code est de montrer qu'il existe une fonctionnalité fonctionnelle pour une classe simple et qu'en même temps, il n'y en a pas pour une classe modèle.
J'ai un cas difficile - il n'y a aucune logique à ma disposition.
Il existe une fonction avec ces entrées
Ainsi, cette fonction produit parfois une valeur de 769
Si vous décommentez la première impression
//Print("Rez_Tree_Calc=",Rez," - f"," Vektor_ZZ=",Vektor_ZZ," CalcSell=",CalcSell);
alors il donne la valeur correcte.
Si vous tronquez la fonction en supprimant uniquement le code qui n'est pas activé au moment où la fonction est appelée au moment de l'erreur, il n'y a pas non plus d'erreur.
Manifestement une erreur de compilateur - développeurs, à qui envoyer la fonction complète, car elle ne tient pas sur le forum.