Errores, fallos, preguntas - página 1838

 

Esto es normal y absolutamente correcto. Has preguntado por el tamaño interno (sin carga útil) de un objeto dinámico.

Utilice ArraySize para los objetos dinámicos y aplique sizeof sólo a los objetos estáticos. Sizeof se cuenta en tiempo de compilación y es siempre una constante.

 
Renat Fatkhullin:

Esto es normal y absolutamente correcto.

Utilice ArraySize para los objetos dinámicos y aplique sizeof sólo a los objetos estáticos.

Gracias. Por favor, haga que la ayuda se ajuste a esta recomendación.
 

Lea la documentación hasta el final

Вычисления размера происходит на этапе компиляции.

 

Pido ayuda, yo mismo estoy perplejo. He escrito este guión para explicarlo.

struct STRUCT 
{
  int a;
};

class CLASS
{
public:
  int a;
};

STRUCT f1()
{  
  static int i = 0;
  
  STRUCT Res;
  
  Res.a = i++;   
  
  return(Res);
}

CLASS* f2()
{
  static int i = 0;
  
  CLASS* Res = new CLASS;
  
  Res.a = i++;
  
  return(Res);
}

void OnStart()
{
  int i1 = f1().a + f1().a;  
  int i2 = f2().a + f2().a;
}

Hay una estructura y hay una clase similar. Necesito, que después del cálculo i2, los objetos de clase correspondientes se borren espontáneamente, como ocurre con los objetos de estructura, cuando se realiza el mismo cálculo i1. ¿Cómo hacerlo?

 

fxsaber:

¿Cómo lo hago?

Envuélvelo en un puntero inteligente, no estoy seguro de que se pueda hacer con mql
 
Комбинатор:
Envuélvelo en un puntero inteligente, no estoy seguro de que se pueda hacer por mql
El problema en sí está causado por la incapacidad de devolver una estructura compleja. Por ejemplo, si en el código anterior en lugar de int a; se hace string a;, entonces f1() fallará al retornar. Por eso mis ojos se posaron en las clases, pero allí me esperaba la trampa descrita.
 

En general, se puede anular el constructor copy y operator=

Esto no funcionará para las clases, se supone que son devueltas por puntero solamente, las estructuras pueden ser devueltas por valor.

 
Комбинатор:

En general, puede anular el constructor copy y operator=

Esto no funcionará para las clases, se supone que son devueltas por puntero solamente, las estructuras pueden ser devueltas por valor.

Gracias. Esta solución me la impidió una restricción recientemente eliminada. Ahora funciona
struct STRUCT
{
  string Str;

  template <typename T>
  void operator =( const T Value )
  {
    Print(__FUNCTION__);
  }
  
  void operator =( const STRUCT &Struct )
  {
    this.Str = Struct.Str;
  }
};

STRUCT f()
{
  STRUCT Res;
  
  return(Res);
}

void OnStart()
{
  f() = 1;
}
 

Durante la optimización del Asesor Experto obtengo el siguiente error

El (0, 3) probado con el error "error crítico de tiempo de ejecución 512 en la función OnTimer (la función de sueño llega al final de la prueba)" a las 0:37:20.429 + sincronización de la historia 0:00:43.395

La prueba individual pasa sin errores.

La versión de MT5 y MetaEditor es la 1571.

 
pivomoe:

Durante la optimización del Asesor Experto obtengo el siguiente error

El error "critical runtime error 512 in OnTimer function (sleep function reaches end of test)" a las 0:37:20.429 + sincronización del historial 0:00:43.395

Elimine la máxima cantidad de código del Asesor Experto, para que el error sea reproducible. Y publicar el código restante.