Hatalar, hatalar, sorular - sayfa 1513

 

Performans açısından hangisi daha iyi, şöyle:

   template < typename T>
   void SetProperty( const int id, const T Value, const int Modifier = 0 ) const
  {
     const string sType = typename (T);

     if (sType == "double" )
      :: ObjectSetDouble ( this .Chart, this .Name, id, Modifier, ( double )Value);
     else if (sType == "string" )
      :: ObjectSetString ( this .Chart, this .Name, id, Modifier, ( string )Value);
     else
      :: ObjectSetInteger ( this .Chart, this .Name, id, Modifier, ( long )Value);

     return ;
  }

veya yöntem aşırı yükleme ?

 
zaskok3 :

Performans açısından hangisi daha iyi, şöyle:

veya yöntem aşırı yükleme ?

performans açısından farkı görmeyeceksiniz - her iki çözümün de olması gereken bir yeri var :)
 
coderex :
performans açısından farkı görmeyeceksiniz - her iki çözümün de olması gereken bir yeri var :)

Teşekkür ederim! Bir soru daha:

Bir yapıdaki const alanlarının anlamı nedir? Bu tür yapılar geçilemez bile (derleyici küfreder veya yığın taşar)?:

 #property strict 

struct STRUCT
{
   const int Num;
  
  STRUCT( const int iNum = 0 ) : Num(iNum) // Если затереть " = 0", то будет ошибка компиляции: 'STRUCT' - wrong parameters count 
  {
  }
  
/*
// Так получается обойти ошибки компиляции, но на этапе выполнения: Stack overflow   
  STRUCT operator = ( STRUCT &Struct )
  {
    STRUCT Res(Struct.Num);
    
    return(Res);
  }
*/
};

const STRUCT GetStruct( const int Num = 0 )
{
  STRUCT Struct(Num);
  
   return (Struct); // 'return' - not allowed for objects with protected members or inheritance 
}

void OnStart ( void )
{
   Print (GetStruct( 1 ).Num);
  
   return ;
}


Yapılar için atama operatörünü aşırı yüklemek aslında imkansızdır (sonsuz özyineleme nedeniyle anlamsızdır). Peki, neden yapıdaki const-alanları?

 
Karputov Vladimir :

Windows 10 x64'te, yapı 1241'de hiç böyle bir hata görmedim. "Genişlet" komutundan sonra, grafik penceresi delikler olmadan tamamen genişler:

Muhtemelen işletim sistemi içindeki bazı ayarları değiştirmişsinizdir (belki işletim sisteminin standart özelliklerini kesmeyi veya kayıt defterini temizlemeyi veya benzeri şeyleri seviyorsunuzdur...).

Camı fare ile sürüklerken o anda "Shift" veya "Ctrl" veya "Alt" tuşlarına basın.

Burada ayrıntılı bir açıklama ile, kodum (keneleri gösteren), ekran görüntüleri ile ServiceDesk'e başvuru yapmanızı önerebilirim.

>> Muhtemelen işletim sistemi içindeki bazı ayarları değiştirmişsinizdir (belki işletim sisteminin standart özelliklerini kırpmaktan veya kayıt defterini temizlemekten hoşlanıyorsunuz...).

Ben böyle şeylerden hoşlanmam, sistemler temiz

>> Burada ayrıntılı bir açıklama ile, kodunuzla (keneleri gösterir), ekran görüntüleri ile ServiceDesk'e başvuruda bulunabilirim .

ve burası nerede? Bu iş parçacığının hizmet olduğunu düşündüm

 

Göstergeye #include aracılığıyla şunun gibi bir şey içeren bir mqh dosyası eklersem:

 int GetIndicatorBuffers( void )
{
   return ( indicator_buffers ); // 'indicator_buffers' - undeclared identifier
}

daha sonra göstergenin kendisinin derleme aşamasında hiçbir hata oluşmaz. Ancak mqh ile ayrı olarak - açılır (yukarıya bakın).

Derleyicinin bağlı mqh'de bir kez daha yemin etmemesi için MT4'teki bu gösterge özelliğinin değerini nasıl öğrenebilirim?

 

MQL5 ve MQL4'te uygulamanın aynı çalışmasını sağlamaya çalışıyorum.

MQL4'e sinput değişkenleri ekleyerek, ParameterSetRange () ve ParameterGetRange () fonksiyonlarını dile eklemeyi unuttuklarına dair bir şüphe var.

MQL4 belgelerinde ParameterSetRange() ve ParameterGetInput() - https://docs.mql4.com/basis/variables/inputvariables#sinput olarak görünürler.

ancak derleyici bunları kabul etmez.

Bu işlevler olmadan, ne yazık ki, giriş değişkenlerinin tüm özelliği ortadan kalkar.

Input Variables - MQL4 Documentation
Input Variables - MQL4 Documentation
  • docs.mql4.com
Input Variables - MQL4 Documentation - MQL4 Documentation
 
zaskok3 :

Teşekkür ederim! Bir soru daha:

Bir yapıdaki const alanlarının anlamı nedir? Bu tür yapılar geçilemez bile (derleyici küfür eder veya yığın taşar)?:


Yapılar için atama operatörünü aşırı yüklemek aslında imkansızdır (sonsuz özyineleme nedeniyle anlamsızdır). Peki, neden yapıdaki const-alanları?

Zevk almak:

 #property strict

struct STRUCT
{
   const int Num;
  
  STRUCT( const int iNum  ) : Num( iNum )
  {
  }
  
  STRUCT( const STRUCT& Struct ) : Num( Struct.Num )
  {
  }
};

const STRUCT GetStruct( const int Num = 0 )
{
  STRUCT Struct( Num );
   return Struct;
}
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
{
   Print ( GetStruct( 1 ).Num );
}
//+------------------------------------------------------------------+
 
Koldun Zloy :

Zevk almak:

Doğrudan konuya gelince güzel, teşekkürler! Yapıcıyı aşırı yüklemeden önce neden tahmin etmediğimi, ancak atama operatörüne girdiğimi hala merak ediyorum. Sonuçta çözüm belli!
 

MT4 terminalli klasörü başka bir sürücüye taşıdı. Ondan önce taşınabilir anahtarla çalıştırdım. Ve bu sefer aynısını yaptı.

Doğrudan sunucuya bağlı terminal. Önceden, terminal klasörünü aktarırken şifreler kaydedilmiyordu - yeniden girilmeleri gerekiyordu. Şimdi (950 oluşturun) bu olmaz.

Bu normal mi (ve sadece benim için)?

 
zaskok3 :

Performans açısından hangisi daha iyi, şöyle:

Tabii ki aşırı yük.