Erreurs, bugs, questions - page 2675

 
Sergey Dzyublik:

Bug MT5 (build 2340) Erreur de compilation lors de la tentative d'accès à la classe interne pour un paramètre de modèle d'une fonction de modèle.

Merci pour le post, corrigé

 
Ilyas:

Dans quel encodage se trouve le fichier ?

En UTF-8 standard

J'ai essayé de différentes manières, avec différents encodages et différents délimiteurs.

Le résultat est soit 5008, soit des hiéroglyphes.

 
Sergey Dzyublik:

Deux questions immédiatement pour le compilateur MT5 (build 2321) :

1. Les priorités d'exécution des fonctions modèles en MQL ne correspondent pas à celles des fonctions modèles en C++ (en ligne : https://onlinegdb.com/Hkvz8Hu7L).
Ainsi, en C++, lorsque les trois fonctions de modèle sont présentes, la fonction de modèle dont le résultat est "C++:1" est exécutée, si elle est supprimée, "C++:2" est exécutée, et si elle est supprimée, "C++:3" est exécutée.
Les priorités dans MQL sont très différentes : "C++:2" suivi de "C++:1" et "C++:3".


Il n'est pas clair pourquoi la première des fonctions est interdite dans MQL, alors que la fonction identique avec un paramètre fictif est déjà autorisée :

Merci pour le message, corrigé

 
Vladimir Pastushak:

En UTF-8 standard

J'ai essayé de différentes manières, avec différents encodages et différents délimiteurs.

Le résultat est soit 5008, soit des hiéroglyphes.

Veuillez fournir un code de travail avec un fichier à examiner.

 

Sur le travail du site :

L'affichage du solde de mon compte personnel est un peu erroné, si vous pouvez le corriger, il y a beaucoup de zéros.

Dossiers :
q1.PNG  12 kb
 
Ilyas:

Veuillez fournir un code de travail avec un fichier à examiner.

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   core();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

  }
//+------------------------------------------------------------------+
void core()
  {
   string value = "", name = "";

   name =  "Test\\Test.csv";
   Print(FileIsExist(name));

   ResetLastError();
 
   int m_hendle = -1;
   m_hendle = FileOpen(name, FILE_READ | FILE_WRITE | FILE_CSV);
   if(m_hendle != INVALID_HANDLE)
     {
      Print((string)m_hendle + "    " + name + " [" + (string)FileSize(m_hendle) + "]"+ (string)GetLastError());
       while(!FileIsEnding(m_hendle))
        {
         string sCurrent = FileReadString(m_hendle);
         Print("sCurrent = ", sCurrent);
        }
      FileClose(m_hendle);
     }
  }
//+------------------------------------------------------------------+
Dossiers :
Files.zip  1 kb
 
Sergey Dzyublik:
En C++, il compile et fonctionne (en ligne : https://onlinegdb.com/Syn90dd7I), mais en MQL l'erreur : "'func' - appel ambigu à une fonction surchargée".

Merci pour le post, corrigé

 
Vladimir Pastushak:

En UTF-8 standard

J'ai essayé de différentes manières, avec différents encodages et différents délimiteurs.

Le résultat est soit 5008, soit des hiéroglyphes.

L'encodage est ANSI, il ne fonctionnera que dans un Windows russe.

Ajout du drapeau FILE_ANSI, lors de l'ouverture d'un fichier

m_hendle = FileOpen(name, FILE_READ | FILE_WRITE | FILE_CSV | FILE_ANSI);
 
Sergey Dzyublik:
Bogue MT5 (build 2340) lorsqu'une structure interne est transmise à une fonction de modèle, le type de données résultant ne peut pas être utilisé comme type de données de base pour une autre structure interne dans une classe de modèle :

Merci pour le post, corrigé
 
Sergey Dzyublik:

MT5 (build 2347) Pourquoi une si grande surcharge lors de l'ajout d'un élément à la fois à un tableau en utilisant ArrayResize, si la mémoire a été réservée pour eux à l'avance ?

Veuillez envisager d'améliorer l'algorithme de réservation interne avec ArrayResize.

Par exemple, pour les classes, nous pouvons supposer qu'elles effectuent une sorte d'"enregistrement interne dans des listes" en plus d'appeler le constructeur.
Et dans le cadre de la réservation avec ArrayResize, outre l'allocation directe de mémoire, vous pouvez essayer d'optimiser le processus :
- prendre des données de l'élément créé adjacent (par exemple, un pointeur vers une table de fonctions virtuelles) ;
- pré-exécuter ou réserver un espace pour "l'inscription interne" de classes qui n'ont pas encore été créées ;

Merci pour le message.

Le code ArrayResize est protégé contre l'appel à vide (lorsqu'il n'y a pas de changement dans le nombre d'éléments), donc le code de la fonction ne fonctionne pas.

Alors qu'un changement réel du nombre d'éléments déclenche l'une ou l'autre partie de la fonction ArrayResize, en fonction du tableau.


Grâce au code que vous avez présenté, j'ai pu réduire à zéro la complexité d'une partie d'ArrayResize, ce qui accélérera la fonction pour les tableaux d'objets.
Raison: