Hatalar, hatalar, sorular - sayfa 1542

 
comp :

Bu sınıf neden MT4 altında derleniyor ama MT5 altında derlenmiyor?

Bu sınıfta operatörün tanımı silinirse MT5 altında derlemeye başlar. Derleyici hatası gibi görünüyor.
 
comp :
Bu sınıfta operatörün tanımı silinirse MT5 altında derlemeye başlar. Derleyici hatası gibi görünüyor.

değiştirmeyi dene

__MQL5__

üzerinde

__MQL5BUILD__

 
coderex :

değiştirmeyi dene

__MQL5__

üzerinde

__MQL5BUILD__

Koşullu derlemeyi karıştırmamak için kaldırdım

 class CHARTOBJECT
{
public :
   template < typename T>
// для MT4 надо заменить ENUM_OBJECT_PROPERTY_STRING на int  
   void SetProperty( const ENUM_OBJECT_PROPERTY_STRING id, const T Value, const int Modifier = 0 ) const
  {
     const string sType = typename (T);

     if (sType == "double" )
      :: ObjectSetDouble ( 0 , "" , id, Modifier, ( double )Value);
     else if (sType == "string" )
      :: ObjectSetString ( 0 , "" , id, Modifier, ( string )Value);
     else
      :: ObjectSetInteger ( 0 , "" , id, Modifier, ( long )Value);

     return ;
  }
  
   virtual void operator =( const string Value ) const
  {
     this .SetProperty( OBJPROP_TEXT , Value);

     return ;
  }
};

Beş derlenemez, dört tamam.

 
comp :

Koşullu derlemeyi karıştırmamak için kaldırdım

Beş derlenemez, dört tamam.

hangi hata günlüğünü gösteriyor?
 
coderex :
hangi hata günlüğünü gösteriyor?
'ObjectSetDouble' - aşırı yüklerden hiçbiri işlev çağrısına uygulanamaz
'ObjectSetInteger' - aşırı yüklemelerden hiçbiri işlev çağrısına uygulanamaz

 
comp :
'ObjectSetDouble' - aşırı yüklerden hiçbiri işlev çağrısına uygulanamaz
'ObjectSetInteger' - aşırı yüklemelerden hiçbiri işlev çağrısına uygulanamaz

Anlaşılan o anladı. MT5'te, üç ENUM_OBJECT_PROPERTY_STRING, ENUM_OBJECT_PROPERTY_INTEGER ve ENUM_OBJECT_PROPERTY_DOUBLE'ın tümü açıkça belirtilmelidir. Ve MT4'te sadece int belirtmeniz yeterlidir ve her şey işe yarayacaktır.

Bu durumda, MQL5'in MQL4'ten daha iyi bir çözüm olup olmadığını bile bilmiyorum.

 
comp :
'ObjectSetDouble' - aşırı yüklerden hiçbiri işlev çağrısına uygulanamaz
'ObjectSetInteger' - aşırı yüklemelerden hiçbiri işlev çağrısına uygulanamaz

Bu doğru, diye yemin etti, yöntemde geçersiz bir ENUM_OBJECT_PROPERTY_STRING id parametresini ObjectSetDouble ve ObjectSetInteger için giriş parametresi olarak ilettiğinize yemin etti.

Genel olarak, sizi iki dil için ortak bir kütüphane yapmayın, daha fazla karışıklık olur, bir kerede kendisi yaptı, sonra her şeyi yeniden yapmak zorunda kaldı.

 
comp :

Anlaşılan o anladı. MT5'te, üç ENUM_OBJECT_PROPERTY_STRING, ENUM_OBJECT_PROPERTY_INTEGER ve ENUM_OBJECT_PROPERTY_DOUBLE'ın tümü açıkça belirtilmelidir. Ve MT4'te sadece int belirtmeniz yeterlidir ve her şey işe yarayacaktır.

Aynen öyle!

 #ifdef __MQL4__
   #define ENUM_OBJECT_PROPERTY_DOUBLE int
   #define ENUM_OBJECT_PROPERTY_STRING int
   #define ENUM_OBJECT_PROPERTY_INTEGER int
#endif

class CHARTOBJECT
{
public :
   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 ( 0 , "" , ( ENUM_OBJECT_PROPERTY_DOUBLE )id, Modifier, ( double )Value);
     else if (sType == "string" )
      :: ObjectSetString ( 0 , "" , ( ENUM_OBJECT_PROPERTY_STRING )id, Modifier, ( string )Value);
     else
      :: ObjectSetInteger ( 0 , "" , ( ENUM_OBJECT_PROPERTY_INTEGER )id, Modifier, ( long )Value);

     return ;
  }
  
   virtual void operator =( const string Value ) const
  {
     this .SetProperty( OBJPROP_TEXT , Value);

     return ;
  }
};

Şimdi her iki platformda da derleniyor. Beşin yardımında açıkça bir hata var.

 
comp :

Aynen öyle!

Şimdi her iki platformda da derleniyor. Beşin yardımında açıkça bir hata var.

Ne hata?
 
Slawa :
Ne hata?

Örneğin, şimdi ObjectSetInteger açıklamasında

 bool    ObjectSetInteger ( 
   long     chart_id,           // идентификатор графика 
   string   name,               // имя 
   int      prop_id,           // свойство 
   long     prop_value         // значение 
   );

Ve olmalı

 bool    ObjectSetInteger ( 
   long                           chart_id,   // идентификатор графика 
   string                         name,       // имя 
   ENUM_OBJECT_PROPERTY_INTEGER   prop_id,   // свойство 
   long                           prop_value // значение 
   );

HESAPLAMA arabelleklerinin sayısı #özellik aracılığıyla sabit kodlanamadığında, IndicatorBuffers ile ilk beşte nasıl olunur? Dördüncüde bu konuda herhangi bir kısıtlama yoktur.