Erreurs, bugs, questions - page 2660

 

Je vais le répéter pour qu'il ne se perde pas dans le hasard).

1) Si j'ouvre un graphique ChartOpen(), alors comment puis-je retourner le focus (activité, visibilité) sur mon graphique, à partir duquel mon EA fonctionne, sans le fermer.

2. qui sait pourquoi Bid, Ask ne coïncident pas avec le prix du graphique Close[0]https://www.mql5.com/ru/forum/160683/page1082#comment_15152111

 
fxsaber:

Oui, je cherchais ça, je ne pensais pas que c'était le bon endroit pour chercher.

C'est comme ça que vous obtenez le numéro d'un agent.

string path = TerminalInfoString(TERMINAL_DATA_PATH);
string agent = StringSubstr(path,StringLen(path)-4);
 

Bug MT5 (build 2342) : erreur de compilation lors de l'appel d'une fonction modèle avec des types d'arguments explicites, lors de l'appel depuis une fonction non modèle surchargée.

template<typename T>
class B{
public:
   void func(const T value){
      printf("1\r\n");
      func<T>(value);             //'func<int>' - ambiguous call to overloaded function with the same parameters        
   };
   
   template<typename TT>
   void func(const TT){
      printf("2\r\n");
   };
   
};


void OnStart(){
   B<int> b;
   b.func(1);
   b.func(1.1);
}
 

Le bogue MT5 (build 2342) génère une erreur de compilation lors de la génération du code d'une fonction modèle même s'il existe une fonction modèle surchargée avec une signature appropriée pour les paramètres passés.
C++ en ligne: https://onlinegdb.com/HyxjmV-DVI

#ifdef __cplusplus
    #include <iostream>
#endif


class C{
public:
   struct A{
      char aaa;
   };
   
   template<typename T>
   void test(A&, T&, T&, void* = NULL){
      printf("1");
   }
   
   template<typename T>
   void test(T&, T&, T&){
      printf("2");
   }
};

struct B : public C::A{
   char data;
};

struct D{
   char data;
};


void OnStart(){
   C c;

   B b;
   D d;
   
   c.test(b, b, b);    // should be: 2       
   c.test(b, d, d);    // should be: 1       //Compile Error: template parameter ambiguous, could be 'B' or 'D'
}

int main(){
   OnStart();
   return 0;
}
 
Sergey Dzyublik :

Le bogue MT5 (build 2342) génère une erreur de compilation lors de la génération du code d'une fonction modèle même s'il existe une fonction modèle surchargée avec une signature appropriée pour les paramètres passés.
C++ en ligne : https://onlinegdb.com/HyxjmV-DVI

Avez-vous déjà eu des nouvelles de Metaquotes au sujet de tout le dur travail de test que vous faites ?
 

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Bugs, bugs, questions

Sergey Dzyublik, 2020.02.28 22:21

class C{
public:
   struct A{
      char aaa;
   };
};

struct B : public C::A{
   char data;
};
Je n'ai jamais mis en œuvre cette fonctionnalité, merci.
 
Alain Verleyen:
Avez-vous déjà eu des nouvelles de Metaquotes au sujet de tout le dur travail de test que vous faites ?

Oui et non.
Pas de plaintes de ma part, mais un bon mot ne fait jamais de mal.

 
Il n'y a aucun moyen de résoudre le problème suivant :
Comment obtenir une "spécialisation partielle" pour la fonction de test afin de distinguer les paramètres transférés et d'exécuter un algorithme différent dans chaque cas ?
Je serai heureux de vous aider, merci.

C++ en ligne avec le comportement attendu(https://onlinegdb.com/rycNVNDN8).
class C{
public:
   struct A{
   public:
      char aaa;
      
      A (char value = 0) : aaa(value){}
      void set(char value){
         aaa = value; 
      };
      char get(){return aaa;}
   };
   
   void test(A&, A& a1, A& a2){
      printf("1");
      a1.aaa = a2.aaa;
   }
   
   template<typename T>
   void test(A&, T& d1, T& d2){
      printf("2");
      d1.set(d2.get());
   }
};

struct B : public C::A{};


struct D{
private:
   char data;
public:  
   D(char value = 0) : data(value){}
   void set(char value){
      data = value; 
   };
   char get(){return data;}
};


void OnStart(){
   C c;

   B b;
   D d;
   
   c.test(b, b, b);    // 2      should be: 1
   c.test(b, d, d);    // 2      should be: 2   
}
 
Sergey Dzyublik:
Il n'y a aucun moyen de résoudre le problème suivant :
Comment obtenir une "spécialisation partielle" pour la fonction de test afin de distinguer les paramètres à passer et exécuter un algorithme différent dans chaque cas ?
Je serai heureux de vous aider, merci.
class C{
public:
   struct A{
      char aaa;
   };
   
   /*void test(A&, A&, A&){
      printf("1");
   }*/
   
   template<typename T>
   void test(A&, T&, T&){
      if (sizeof(T)==sizeof(A)) printf("1");
      else                      printf("2");
   }
};

struct B : public C::A{
   char data;
};

struct D{
   char data;
};


void OnStart(){
   C c;

   B b;
   D d;
   
   c.test(b, b, b);    // 2      should be: 2 
   c.test(b, d, d);    // 1      should be: 1    
}
 
Nikolai Semko:

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).