エラー、バグ、質問 - ページ 1647

 
Vasiliy Sokolov:

以下の挙動について説明してください。

安定的に常時、またはランニングインジケータの最初のティックで表示されるか?

wotchウィンドウに_LastErrorの値が表示されない

 
Alexey Navoykov:

本当ですか?

同時に......どうしてそう思うのですか? 1が等しければ、2も等しくなる。
両プラットフォームの例
// MQL4&5-code

#ifdef __MQL5__
  #define show_inputs script_show_inputs
#endif

#property show_inputs
#property strict

sinput double Price1 = 1.234566;
sinput double Price2 = 1.234574;

void NormToConsole( const double Price, const int digits, const string Str )
{
  Print("NormalizeDouble(" + Str + "(=" + DoubleToString(Price, digits + 1) +
        "), " + (string)digits + ") = " + DoubleToString(NormalizeDouble(Price, digits), digits));
}

#define  NORM2CONSOLE(PRICE) NormToConsole(PRICE, 5, #PRICE);

void OnStart()
{  
  NORM2CONSOLE(Price1);
  NORM2CONSOLE(Price2);
  NORM2CONSOLE(Price2 - Price1);    
}
結果
NormalizeDouble(Price1(=1.234566), 5) = 1.23457
NormalizeDouble(Price2(=1.234574), 5) = 1.23457
NormalizeDouble(Price2-Price1(=0.000008), 5) = 0.00001
 

コンパイルエラー

void f( int& i ){ Print( i ); }
void OnStart()
{
        int a, b;
        f( a = 5 ); //error: '=' - parameter passed as reference, variable expected
        f( b = a ); //error: '=' - parameter passed as reference, variable expected
}
 
A100:

コンパイルエラー

void f( int& i ){ Print( i ); }
void OnStart()
{
        int a, b;
        f( a == 5 ); //error: '=' - parameter passed as reference, variable expected
        f( b == a ); //error: '=' - parameter passed as reference, variable expected
}
 
Vitalii Ananev:
あなたの例では、エラーは正当化されますが、私の場合は違います。
 
A100:
あなたの例では、エラーは正当化されますが、私の場合は違います。

コードをよく読まずに、自動的に条件付きif文があると思ったのですが、fという関数があるだけなのですね。

関数には式ではなく、変数や事前に計算された値を渡す必要があります。

void f( int& i ){ Print( i ); }
void OnStart()
{
        int a = 5;
        int b = a;
        f(a); //error: '=' - parameter passed as reference, variable expected
        f(b); //error: '=' - parameter passed as reference, variable expected
}
 
Vitalii Ananev:

関数には式ではなく、変数やあらかじめ計算された値を渡さなければなりません。

何が違うのでしょうか?

//1.mq5
         a = 5;
         f( a );
//2.mq5
         f( a = 5 );
 
A100:

何が違うのでしょうか?

前者では変数が、後者では演算 結果が渡される。そして、そこにインタのために何が仕組まれているのか、誰が知っているのでしょう。

実際、この参照エラーは非常に長い間、迷惑をかけてきました、全くないはずです。

 
A100:

何が違うの?

違いは、最初のケースではエラーが発生しないことです :)
 

ArrayResize関数について いくつか提案があります。reserve_size パラメータに- 1を設定できるようにする必要があります。 そうすれば、この値を保存したり持ち歩いたりする必要がなくなります。 最初に必要な予備でサイズを変更すれば、その後は心配 する必要がなくなります。そうでないと、配列のサイズを変更する関数に渡したとき、その関数は配列にあらかじめ設定されているリザーブについて何も知らないので、結果的に配列のサイズが小さくなり、後で不必要なメモリの再割り当てが発生するという不都合が 生じます。 結局のところ、この値は配列のどこかに保存されているのだと思います。それとも違うのでしょうか?