Hatalar, hatalar, sorular - sayfa 2952

 
Alexey Rassvetnyy :

Arızayı düzeltin lütfen. MQL5, bazı yerleşik numaralandırmaların genel parametreler olarak kullanılmasına izin vermez, örneğin: ENUM_CHART_PROPERTY_DOUBLE, ENUM_CHART_PROPERTY_STRING.

Özel numaralandırmalarda ve diğer yerleşik olanlarda sorun yoktur.

Sorun, numaralandırmada boş değere sahip bir öğenin olmaması nedeniyle ortaya çıkar. Bu derleme hatasını oluşturan kendi numaralandırmamı oluşturmayı başardım.

 #include <Generic\HashMap.mqh>
enum TEST_ENUM {
   ENUM1, ENUM2
};
enum TEST_ENUM2 { //отсутствует элемент с номером 0
   ENUM1=- 10 , ENUM2
};
void OnStart ()
  {
   CHashMap< ENUM_CHART_PROPERTY_INTEGER , int > mapI;     // эта срока комилируется без ошибок
   CHashMap< ENUM_CHART_PROPERTY_DOUBLE , double > mapD;   // здесь ошибки компиляции: 'NULL' - cannot convert enum  HashMap.mqh     21      39. 'NULL' - cannot convert enum        HashMap.mqh     462     30
   CHashMap< ENUM_CHART_PROPERTY_STRING , string > mapS;   // здесь ошибки компиляции: 'NULL' - cannot convert enum  HashMap.mqh     21      39. 'NULL' - cannot convert enum        HashMap.mqh     462     30
   CHashMap<TEST_ENUM, double > mapE;     // эта срока комилируется без ошибок
   CHashMap<TEST_ENUM2, double > mapE2;     // здесь ошибки компиляции: 'NULL' - cannot convert enum       HashMap.mqh     21      39. 'NULL' - cannot convert enum        HashMap.mqh     462     30
  }
 
Alexey Rassvetnyy :

Sorun, numaralandırmada boş değere sahip bir öğenin olmaması nedeniyle ortaya çıkar. Bu derleme hatasını oluşturan kendi numaralandırmamı oluşturmayı başardım.

Senin durumunda, kütüphane dosyasını düzeltmek yardımcı olacaktır.

 //+------------------------------------------------------------------+
//| fix HashMap.mqh                                                  |
//|  line 21  | was | Entry(void): key(NULL) {}                      |
//|           | now | Entry(void): key((TKey)NULL) {}                |
//|  line 462 | was | m_entries[i].key=NULL;                         |
//|           | now | m_entries[i].key=(TKey)NULL;                   |
//+------------------------------------------------------------------+
 
DMITRII PECHERITSA :

Senin durumunda, kütüphane dosyasını düzeltmek yardımcı olacaktır.

Teşekkürler, işe yarıyor.

Ancak, MQ'yu destekleyen dosyayı manuel olarak düzeltirsem, bir sonraki güncellememde değişikliklerim geri alınacak. Standart kitaplığı destekleyen geliştiricilerin , standart kitaplığın kodu boyunca NULL'ları parametrik türlere dönüştürmesi veya NULL'un açık bir belirti olmaksızın herhangi bir türe otomatik olarak aktarılabilmesi için derleyiciyi ince ayar yapması gerekir.

 
Alexey Rassvetnyy :

Standart kitaplığı destekleyen geliştiricilerin , standart kitaplığın kodu boyunca NULL'ları parametrik türlere dönüştürmesi veya NULL'un açık bir belirti olmaksızın herhangi bir türe otomatik olarak aktarılabilmesi için derleyiciyi ince ayar yapması gerekir.

Geliştiricilerin şu prensibi vardır: ne kadar basit, o kadar iyi. Montajcı değil, bu iyi, o yüzden kullan. Öyle de olabilir.

 
DMITRII PECHERITSA :

Senin durumunda, kütüphane dosyasını düzeltmek yardımcı olacaktır.

Mesaj için teşekkürler.

SB'de bu değişiklikleri yaptı

 
Ilyas :

Mesaj için teşekkürler.

SB'de bu değişiklikleri yaptı

Yalnızca anahtarlar için değil, değerler için de düzeltildi mi?

 
Stanislav Korotky :

Yalnızca anahtarlar için değil, değerler için de düzeltildi mi?

Evet, değerler için de

 
Ilyas :

Hata ayıklayıcıda bir yapının içeriğini gösterirken bazı alanlarını gözlemlenebilirlerden kaldırabilmek mümkün müdür?


Birkaç büyük yapı var. Onları beş alanda gözlerinizle karşılaştırmanız gerekir. Çalışmıyor.

 

Güzel gün! Sorunu çözmeye yardımcı olun.

MT5 Expert Advisor'da bir ticaret talebi göndermeden ve kontrol etmeden önce aşağıdaki type_filling tanımını kullanıyorum:

 // тип FILLING
int SYMBOL_FILLING = ( int ) SymbolInfoInteger (iNameSymbol, SYMBOL_FILLING_MODE );
switch (SYMBOL_FILLING)
{
   case SYMBOL_FILLING_FOK :   iЗапрос.type_filling = ORDER_FILLING_FOK ;     break ;
   case SYMBOL_FILLING_IOC :   iЗапрос.type_filling = ORDER_FILLING_IOC ;     break ;
   default :                   iЗапрос.type_filling = ORDER_FILLING_RETURN ; break ;
}

Ancak böyle bir yapının tüm hesaplarda ve tüm komisyoncular için çalışmadığı gerçeğiyle karşılaştım ve tamamlanmış talebi OrderCheck aracılığıyla kontrol ettikten sonra, hata 10030 görünüyor ( Bakiyeye göre desteklenmeyen emir yürütme türü belirtildi). Bu durumda SYMBOL_FILLING = 3 ve ORDER_FILLING_RETURN tipi seçilir.

Herhangi bir harici kitaplık kullanmıyorum (CTrade gibi). Lütfen yardım edin veya soruma cevap alabileceğim bir yere yönlendirin.

Şimdiden teşekkürler!

 
fxsaber :

Hata ayıklayıcıda bir yapının içeriğini gösterirken bazı alanlarını gözlemlenebilirlerden kaldırabilmek mümkün müdür?


Birkaç büyük yapı var. Onları beş alanda gözlerinizle karşılaştırmanız gerekir. Çalışmıyor.

Herhangi bir değişkenin değerini kaynakta fareyi üzerine getirerek görüntülemek en iyisidir - bu şekilde izleme listesine herhangi bir şey eklemeniz gerekmez ve herhangi bir yuvalama alanı bir referans zinciri (ve komşu) olmadan kullanılabilir. alanlar).