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
これが間違いなのかどうか。

正しさという点では、これが正しいのです。

どうやら三項演算 子は参照を返すのではなく、値で変数を返すようです(原理的に論理的ではありません)。

これはtemp変数であることがわかり、参照パラメータを持つmql関数が嫌がる。

つまり、三項演算子とリファレンスは仲が悪い、一言で言えば。

常識的に考えて......どうだろう、この構造は論理的だ。
 
コンビナート です。

この場合、参照パラメータを持つmql関数が嫌うramp変数を取得することになります。

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:

不思議ですね。私は、テイクオーバーの有無にかかわらず、ポジションを建てる ときはいつもこのオプションを使用します。

そのような場合は、ブラケットを追加しなくても動作します。
理由: