Características da linguagem mql5, subtilezas e técnicas - página 42

 
PositionSelect reporá todos os dados do PositionGet a zero em caso de falha.
 
Um erro clássico
void Func( int& ) {}

void OnStart()
{
  int i;
  
  Func(true ? i : i); // '?' - parameter passed as reference, variable expected
  Func(i); // OK
}
 
fxsaber:
Um erro clássico
A perguntar-se se este é o erro certo?
 
fxsaber:
A pensar se isto é um erro.

Em termos de exatidão, isto é correto.

Aparentemente o operador ternário não retorna uma referência, mas uma variável por valor (o que não é lógico em princípio).

Afinal, trata-se de uma variável temporária, que funciona com parâmetros de referência que não agradam.

Isto é, operador ternário e referências não se entendem, em poucas palavras.

O senso comum -- não sei, a construção é lógica.
 
Combinador:

Você obtém uma variável de rampa, que funciona em rampa com parâmetros de referência que não lhe agradam.

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

void In( MqlTick& ) {}

void OnStart()
{
  In(Out());
}
Exactamente "gosta". É por causa de tais exemplos que surgiram dúvidas.
 
fxsaber:
Exactamente "gosta". É por causa de tais exemplos que surgiram dúvidas.

Pela descrição do erro em si, parece um problema com links e não-links.

talvez alguém com conhecimentos mais actualizados da língua possa explicar.

 

fxsaber:
Erro clássico

void Func( int& ) {}

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

E se assim for.

void Func( int& ) {}

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

Que tal isto?

É mais rápido para verificar do que para fazer um posto.

Não funciona, é claro.

 
fxsaber:

É mais rápido verificar do que fazer um posto.

Não está a funcionar, claro.

Estranho. Eu sempre uso esta opção ao abrir posições com ou sem takeaways.

          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:

Estranho. Eu sempre uso esta opção ao abrir posições com ou sem aquisições.

Nesses casos, funcionará mesmo sem parênteses adicionais.