Características del lenguaje mql5, sutilezas y técnicas - página 42

 
PositionSelect pondrá a cero todos los datos de PositionGet en caso de fallo.
 
Un error clásico
void Func( int& ) {}

void OnStart()
{
  int i;
  
  Func(true ? i : i); // '?' - parameter passed as reference, variable expected
  Func(i); // OK
}
 
fxsaber:
Un error clásico
¿Se pregunta si este es el error correcto?
 
fxsaber:
Me pregunto si esto es un error.

En términos de corrección, esto es correcto.

Aparentemente el operador ternario no devuelve una referencia sino una variable por valor (lo que en principio no es lógico).

Resulta ser una variable temporal, lo que no le gusta a las funciones mql con parámetros de referencia.

Es decir, el operador ternario y las referencias no se llevan bien, en pocas palabras.

Sentido común... no sé, la construcción es lógica.
 
Combinador:

Obtienes una variable rampa, lo que no le gusta a las funciones mql con parámetros de referencia.

MqlTick Out()
{
  MqlTick Tick = {0};
  
  return(Tick);
}

void In( MqlTick& ) {}

void OnStart()
{
  In(Out());
}
Exactamente "me gusta". Es por estos ejemplos que han surgido dudas.
 
fxsaber:
Exactamente "me gusta". Es por estos ejemplos que han surgido dudas.

Por la descripción del error en sí, parece un problema de enlaces y no enlaces.

tal vez alguien con un conocimiento más actualizado del idioma pueda explicarlo.

 

fxsaber:
Классическая ошибка

void Func( int& ) {}

void OnStart()
{
  int i;
  
  Func(true ? i : i); // '?' - parameter passed as reference, variable expected
  Func(i); // OK
}

Y si es así.

void Func( int& ) {}

void OnStart()
{
  int i;
  
  Func((true ? i : i));
  Func(i); // OK
}
 
Alexey Viktorov:

¿Qué te parece esto?

Es más rápido comprobarlo que hacer un post.

No funciona, por supuesto.

 
fxsaber:

Es más rápido comprobarlo que hacer un post.

No funciona, por supuesto.

Es raro. Siempre utilizo esta opción cuando abro posiciones con o sin retirada de fondos.

          trade.BuyStop(lot, buyPrice, _Symbol, 0.0, (tacke == 0.0 ? 0 : buyPrice+tacke));
          trade.SellStop(lot, sellPrice, _Symbol, 0.0, (tacke == 0.0 ? 0 : sellPrice-tacke));
 
Alexey Viktorov:

Extraño. Siempre utilizo esta opción cuando abro posiciones con o sin adquisiciones.

En estos casos, funcionará incluso sin soportes adicionales.