Errores, fallos, preguntas - página 2760

 
Sergey Dzyublik:

El código muestra un BAG en el que no se puede introducir una condición, pero aún así activa un punto de interrupción en un lugar completamente diferente del código.
¿Más preguntas?

El optimizador de código lo ha tirado todo y la función ha quedado vacía.

El punto de interrupción se desplazó hasta el final de la función y se activó.

 
MetaQuotes:

Fue el optimizador de código el que tiró todo y dejó la función vacía.
El punto de interrupción se movió al mismo final de la función y funcionó.

Me emocioné un poco con el primer ejemplo, estoy de acuerdo.
¿Pero qué pasa con el segundo? Pues bien, el punto de ruptura permanece dentro de la condición y no se mueve a ninguna parte.
La activación de un punto de interrupción induce al usuario a pensar que la condición de entrada se ha cumplido, cuando en realidad podría no ser así en absoluto:

class A{
public:
   bool m_flag;
   A* m_next;
   A(bool flag) : m_flag(flag){}
   
   void test(){
      if(m_flag){
         printf("1");
         m_next = m_next;    // Вручную установленная точка останова срабатывает как для false так и true условий
         //m_next = &this;   // Ok
      }   
   }
};

void OnStart(){
  {A a(false); a.test();}   // Result: breakpoint              Expected result: 
  {A a(true);  a.test();}   // Result: printf + breakpoint     Expected result: printf + breakpoint
}
 
MetaQuotes:

El punto de interrupción se movió al mismo final de la función y funcionó.

¿Crees que esto no es un error?

 
MT5 (build 2460) algo se rompió al usar la herencia de las clases de la plantilla, en las versiones anteriores incluyendo el build 2450 todo funcionaba.
 
Error de compilación de MT5 (build 2460) al heredar de una clase de plantilla del espacio de nombres.
C++ en línea:https://onlinegdb.com/S1E503pj8
namespace NameSpace{  
   struct A{};
   
   template<typename T>
   struct B : public A{};          // 'A' - declaration without type
};

struct D : public NameSpace::B<int>{
   int data;
};

void OnStart(){
   D d;
}
 

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

Preguntas sobre POO en MQL5

fxsaber, 2020.05.30 10:04

Obtuve un resultado inesperado.
#include <fxsaber\Benchmark.mqh> // https://c.mql5.com/3/321/Benchmark.mqh

// Простая структура.
struct STRUCT1
{
  int i;  
  double j[2];
};

// Сложная структура.
struct STRUCT2
{
  int i;  
  string Str;
  
  STRUCT2() : Str("1234567 1234567")
  {
  }
};

template <typename T>
int Func( T &Array[] )
{  
  // Write
  for (int i = ArraySize(Array) - 1; i >= 0; i--)
    Array[i].i = i;

  int Sum = 0;
  
  // Read
  for (int i = ArraySize(Array) - 1; i >= 0; i--)
    Sum += Array[i].i;
    
  return(Sum + ArraySize(Array));    
}

void OnStart()
{
  STRUCT1 Array1[]; // Простая структура.
  STRUCT2 Array2[]; // Сложная структура.
  
  const int Amount = 5 e7;
  
  Print(_B(ArrayResize(Array1, Amount), 1));
  Print(_B(ArrayResize(Array2, Amount), 1));
    
  Print(_B(Func(Array1), 1)); // Чтение и запись простой структуры происходит в разы дольше,
  Print(_B(Func(Array2), 1)); // чем сложной.
}


        50000000
        Alert: Time[Test6.mq5 280: ArrayResize(Array2,Amount)] = 640 ms.
        50000000
        Alert: Time[Test6.mq5 282: Func(Array1)] = 440 ms.
        1333106752
        Alert: Time[Test6.mq5 283: Func(Array2)] = 156 ms.
        1333106752
 

¿Por qué enOBJ_TRENDBYANGLE no podemos conocer el ángulo mediante programación?

Podemos establecer la hora y los precios de los dos puntos mediante programación, pero el ángulo devuelve 0.

Si movemos OBJ_TRENDBYANGLE manualmente, devuelve el valor del ángulo normal.


Quiero simplemente colocar el texto en la línea de tendencia en el mismo ángulo que la propia línea de tendencia.

Pero la línea de tendencia no devuelve el ángulo, mientras que OBJ_TRENDBYANGLE tiene una segunda coordenada fija y cuando la escala del gráfico cambia como consecuencia de la subida o bajada del precio, obtenemos una información falsa...

 

¿Por qué el compilador da una advertencia ?

uchar uc[16];
ArrayInitialize(uc, 0xFF); //truncation of constant value

UPD: no

int ArrayInitialize( uchar array[], uchar value );

no es conveniente escribir

uchar uc[16] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
 

Código 401 - ¿Cuál es el error?

¿Qué pasa?

401

La herencia de esta clase es imposible porque está declarada con el especificador final

Документация по MQL5: Основы языка / Типы данных / Структуры, классы и интерфейсы
Документация по MQL5: Основы языка / Типы данных / Структуры, классы и интерфейсы
  • www.mql5.com
Структура является набором элементов произвольного типа (кроме типа void). Таким образом, структура объединяет логически связанные данные разных типов. Объявление структуры Имя структуры нельзя использовать в качестве идентификатора (имени переменной или функции). Следует иметь ввиду, что в MQL5 элементы структуры следуют непосредственно друг...
 
Igor Makanu:

¿Por qué el compilador da una advertencia ?

UPD: no

int ArrayInitialize( uchar array[], uchar value );

no es conveniente escribir

0xFF es probablemente convertido en 4 bytes por el compilador.

Alexsandr San:

Código 401, ¿alguien puede decirme qué es este error?

encontrado

401

La herencia de esta clase es imposible porque está declarada con el especificador final

¿Cuál es la cuestión: no hay modificador final, pero hay un error, o qué?