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
}

如果是这样

void Func( int& ) {}

void OnStart()
{
  int i;
  
  Func((true ? i : i));
  Func(i); // OK
}
 
阿列克谢-维克多罗夫

这个怎么样?

检查比发帖更快。

当然,并不奏效。

 
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:

很奇怪。我在开仓时 总是使用这个选项,无论是否有接管。

在这种情况下,即使没有额外的托架,它也能发挥作用。