Errores, fallos, preguntas - página 2660

 
Igor Makanu:

necesita un ID - agente local en el probador, no estoy seguro de por qué no hay tal funcionalidad

TerminalInfoString(TERMINAL_DATA_PATH);
 

Me gustaría repetir esto, para no perderme en el azar)

1. Por favor, aconsejar si abro el gráfico ChartOpen(), entonces cómo puedo devolver el foco (actividad, visibilidad) en mi gráfico, desde el cual mi EA trabaja, sin cerrarlo.

2. Quién sabe por qué Bid, Ask no coincide con el precio del gráfico Close[0]https://www.mql5.com/ru/forum/160683/page1082#comment_15152111

 
fxsaber:

Sí, estaba buscando eso, no pensé que fuera el lugar para buscar

Así se consigue el número de un agente.

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

Error de compilación de MT5 (compilación 2342) al llamar a una función de plantilla con tipos de argumentos explícitos, cuando se llama desde una función sobrecargada no de plantilla.

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

Bug MT5 (build 2342) genera un error de compilación al generar código para una función de plantilla aunque exista una función de plantilla sobrecargada con una firma adecuada para los parámetros pasados.
C++ en línea: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 :

Bug MT5 (build 2342) genera un error de compilación al generar código para una función de plantilla aunque exista una función de plantilla sobrecargada con una firma adecuada para los parámetros pasados.
C++ en línea: https://onlinegdb.com/HyxjmV-DVI

¿Alguna vez te han contestado desde Metaquotes a todo el trabajo de pruebas que haces?
 

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Bichos, errores, preguntas

Sergey Dzyublik, 2020.02.28 22:21

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

struct B : public C::A{
   char data;
};
Nunca he implementado esta función, gracias.
 
Alain Verleyen:
¿Alguna vez te han contestado desde Metaquotes a todo el trabajo de pruebas que haces?

Sí y no.
No hay quejas por mi parte, pero una buena palabra nunca está de más.

 
No hay manera de resolver el siguiente problema:
¿Cómo conseguir una "especialización parcial" para que la función de prueba distinga los parámetros transferidos y ejecute un algoritmo diferente en cada caso?
Estaré encantado de ayudar, gracias.

C++ en línea con el comportamiento esperado(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:
No hay manera de resolver el siguiente problema:
¿Cómo conseguir una "especialización parcial" para que la función de prueba distinga los parámetros transferidos y ejecute un algoritmo diferente en cada caso?
Estaré encantado de ayudar, gracias.
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    
}