Hatalar, hatalar, sorular - sayfa 1647

 
Vasiliy Sokolov :

Lütfen aşağıdaki davranışı açıklayın:

Kararlı mı ve herhangi bir zamanda mı yoksa çalışan göstergenin ilk tikinde mi?

İzleme penceresi _LastError değeri eksik

 
Alexey Navoykov :

Emin misin?

ve nasıl hayal ediyorsun? Birincisi eşitse, ikincisi daha da fazla olacaktır.
Her iki platform için örnek
 // 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);    
}
Sonuç
 NormalizeDouble (Price1(= 1.234566 ), 5 ) = 1.23457
NormalizeDouble (Price2(= 1.234574 ), 5 ) = 1.23457
NormalizeDouble (Price2-Price1(= 0.000008 ), 5 ) = 0.00001
 

Derlerken hata

 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 :

Derlerken hata

 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 :
Örneğinizde hata haklı, farklı bir durumum var
 
A100 :
Örneğinizde hata haklı, farklı bir durumum var

Kodu dikkatsizce okudum, otomatik olarak orada bir koşullu if ifadeniz olduğuna karar verdim ve sadece f adında bir fonksiyonunuz var.

Fonksiyona bir ifade değil, önceden hesaplanmış bir değişken veya bir değer iletmek gerekir.

 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 :

Fonksiyona bir ifade değil, önceden hesaplanmış bir değişken veya bir değer iletmek gerekir.

Fark ne?

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

Fark ne?

İlk durumda, bir değişken, ikinci durumda, işlemin sonucu iletilir. Ve incir, inta için neyin yığıldığını biliyor

Aslında, bağlantıyla ilgili bu hata çok uzun zamandır çileden çıkarıcı ve güçlü bir şekilde, hiç olmaması gerekir.

 
A100 :

Fark ne?

Aradaki fark, ilk durumda hata olmamasıdır :)
 

ArrayResize işlevi için öneriler var. Reserve_size parametresini -1 olarak ayarlama yeteneğini eklememiz gerekiyor, bu önceki değer kümesini kullanmak anlamına gelir. O zaman bu değeri saklamanız veya yanınızda taşımanız gerekmez. Önce gerekli rezerv ile yeniden boyutlandırmanız yeterli olacaktır ve daha sonra artık endişelenmenize gerek kalmayacaktır. Aksi takdirde, bir diziyi yeniden boyutlandıran, ancak önceden yüklenmiş olan rezerv hakkında hiçbir şey bilmeyen bir işleve ilettiğinizde ve sonuç olarak onu devirerek gereksiz bellek yeniden tahsislerine yol açtığınızda sürekli rahatsızlık verir. Sonuçta, anladığım kadarıyla bu değer dizi için bir yerde saklanıyor. Ya da değil?

Neden: