Errori, bug, domande - pagina 2660

 
Igor Makanu:

bisogno di un ID - agente locale nel tester, non so perché non c'è questa funzionalità

TerminalInfoString(TERMINAL_DATA_PATH);
 

Lo ripeterò in modo che non si perda nella casualità)

1. Vi prego di consigliarmi se apro il grafico ChartOpen(), poi come posso restituire il focus (attività, visibilità) sul mio grafico, da cui funziona il mio EA, senza chiuderlo.

2. Chi sa perché Bid, Ask non coincide con il prezzo del grafico Close[0]https://www.mql5.com/ru/forum/160683/page1082#comment_15152111

 
fxsaber:

Sì, lo stavo cercando, non pensavo fosse il posto dove cercare

È così che si ottiene il numero di un agente.

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

Bug MT5 (build 2342) errore di compilazione quando si chiama una funzione template con tipi di argomenti espliciti, quando si chiama da una funzione non template sovraccaricata.

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

Il bug MT5 (build 2342) genera un errore di compilazione quando genera codice per una funzione template anche se esiste una funzione template sovraccaricata con una firma adatta ai parametri passati.
C++ online: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 :

Il bug MT5 (build 2342) genera un errore di compilazione quando genera codice per una funzione template anche se esiste una funzione template sovraccaricata con una firma adatta ai parametri passati.
C++ online: https://onlinegdb.com/HyxjmV-DVI

Hai mai ricevuto una risposta da Metaquotes per tutto il duro lavoro di test che fai?
 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Bug, bug, domande

Sergey Dzyublik, 2020.02.28 22:21

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

struct B : public C::A{
   char data;
};
Non ho mai implementato questa funzione, grazie.
 
Alain Verleyen:
Hai mai ricevuto una risposta da Metaquotes per tutto il duro lavoro di test che fai?

Sì e no.
Nessuna lamentela da parte mia, ma una buona parola non fa mai male.

 
Non c'è modo di risolvere il seguente problema:
Come ottenere una "specializzazione parziale" per la funzione di test per distinguere i parametri trasferiti ed eseguire un algoritmo diverso in ogni caso?
Sarò lieto di aiutarvi, grazie.

C++ online con comportamento previsto(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:
Non c'è modo di risolvere il seguente problema:
Come ottenere una "specializzazione parziale" per la funzione di test per distinguere i parametri da passare ed eseguire un algoritmo diverso in ogni caso?
Sarò lieto di aiutarvi, grazie.
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    
}
Motivazione: