Особенности языка mql5, тонкости и приёмы работы - страница 42

 
PositionSelect в случае неудачи обнуляет все PositionGet-данные.
 
Классическая ошибка
void Func( int& ) {}

void OnStart()
{
  int i;
  
  Func(true ? i : i); // '?' - parameter passed as reference, variable expected
  Func(i); // OK
}
 
fxsaber:
Классическая ошибка
Задумался, а правильно ли, что это ошибка?
 
fxsaber:
Задумался, а правильно ли, что это ошибка?

С точки зрения правильности правильно.

По-видимому тернарный оператор возвращает не ссылку а переменную по значению (что в принципе не не логично).

Получается темповая переменная, которую в mql не любят функции со ссылочными параметрами.

Т.е. тернарный оператор и ссылки не дружат, если вкратце.

Сточки зрения здравого смысла -- хз, конструкция логична.
 
Комбинатор:

Получается темповая переменная, которую в mql не любят функции со ссылочными параметрами.

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

void In( MqlTick& ) {}

void OnStart()
{
  In(Out());
}
Как раз "любит". Именно и-за подобных примеров возникли сомнения.
 
fxsaber:
Как раз "любит". Именно и-за подобных примеров возникли сомнения.

по самому описанию ошибки похоже на проблеиы со ссылками и не-ссылками.

может кто-нить с более актуальными знаниями по языку объяснит.

 

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

void Func( int& ) {}

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

A если так

void Func( int& ) {}

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

A если так

Проверить - быстрее, чем делать пост.

Не работает, конечно.

 
fxsaber:

Проверить - быстрее, чем делать пост.

Не работает, конечно.

Странно. Я таким вариантом пользуюсь всегда при открытии позиций с тейками или нет.

          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:

Странно. Я таким вариантом пользуюсь всегда при открытии позиций с тейками или нет.

В таких случаях и без доп. скобок работать будет.
Причина обращения: