Hatalar, hatalar, sorular - sayfa 216

 
Vigor :

Çağrı yığını taşması sorunuyla karşı karşıya kaldı (bence).

Nesnelerden birinde bir yöntem çağırdıktan sonra aşağıdaki örneğe bakın. Kod basitleştirilmiştir, yalnızca özü. CClass1 sınıfı temeldir ve list1 listesinde bu sınıfın soyundan gelen farklı nesneler vardır ve bunların init işlevlerinin farklı uygulamaları vardır. Bu nedenle, init işlevinin benzer bir liste üzerinde yinelendiği bir sınıfta (başka bir deyişle, iç içe geçmiş bir arabirimin başlatılması, bir panelde bir panel) bir satırda init'ten döndükten sonra

bir hata oluşur

2010.12.02 00:21:00 test1 (EURUSD,H1) 'Container.mqh' içinde geçersiz işaretçi erişimi (74,10)

Onlar. işaretçi t öldü.

Hata ayıklarken böyle bir hata olmaz, yöntemi çağırdıktan sonra işaretçi "canlı" olur, iç içe arayüzler oluşturulur ve Expert Advisor çalışmaya devam eder.

Hatayı aşmanın tek yolu şudur:

#property yığın boyutunu belirtmek hiçbir şey elde etmedi.

Kesin bir şey söylemek zor. Kaynaklara ihtiyaç var.

Servis masasına bir istek yazmayı deneyin.

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 

Tatilden döndüm, terminalleri başlattım, 360'a yükselttim ve bir gösterge çalışmayı durdurdu...

değişiklikleri okuyun: 6. MQL5: Grafikte sabit tıklama olayı işleme.

Şimdi, bir grafik nesneye tıklandığında, hemen iki olay oluşturulur: CHARTEVENT_OBJECT_CLICK + CHARTEVENT_CLICK ve daha önce sadece bir CHARTEVENT_OBJECT_CLICK vardı, bu da çift fare tıklamasını simüle etmeyi mümkün kıldı.

Şimdi hep böyle mi olacak yoksa bir bug mı?

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика - Документация по MQL5
 
AlexSTAL :

Tatilden döndüm, terminalleri başlattım, 360'a yükselttim ve bir gösterge çalışmayı durdurdu...

değişiklikleri okuyun: 6. MQL5: Grafikte sabit tıklama olayı işleme.

Şimdi, bir grafik nesneye tıklandığında, hemen iki olay oluşturulur: CHARTEVENT_OBJECT_CLICK + CHARTEVENT_CLICK ve daha önce sadece bir CHARTEVENT_OBJECT_CLICK vardı, bu da çift fare tıklamasını simüle etmeyi mümkün kıldı.

Şimdi hep böyle mi olacak yoksa bir bug mı?

Bu bilerek yapıldı.
 

Bir kez daha imkansızlık duvarına çarptım,

sınıfın belirli parametrelerle başlatılması için yapıcıya bir parametre iletilmesi gerekir,

sorun nasıl aşılır? ne tavsiye edersin

 
Urain :

Bir kez daha imkansızlık duvarına çarptım,

sınıfın belirli parametrelerle başlatılması için yapıcıya bir parametre iletilmesi gerekir,

sorun nasıl aşılır? ne tavsiye edersin


ile

Evet, başka bir yol göremiyorum.

 class test{
   private :
     bool inited;
     int value ;  
   public :
     void test(){
      inited = false ;
    }
    
   bool Set( int passed ){
     value = passed;
     return ( true );
  }
   bool Init( int passed ){
     if ( Set( passed ) ){
      inited = true;
       return ( true );
    }
     return ( false );
  }
   int Get( ){
     if ( !inited ){
      Print( "Объект неинициализирован" );
       return (- 1 );
    }
     return ( value );
  }
};

void OnStart()
  {
  
  
  test var ;
  if( ! var .Init( 1 )){
    Print("Ошибка инициализации объекта");
    return;
}
  Print( var .Get());
  
  test var2;
  Print( var2.Get() );
  }

ve elbette, devralınan sınıflar söz konusu olduğunda, Init'i doğru sırada düzenlemeniz gerekir.

ama genel olarak karmaşık projelerde hata işleme hakkında bir makale yazmak istiyorum, Yazdır ve burada olduğu gibi iade bir seçenek değil.

 
gdtt :

Evet, başka bir yol göremiyorum.

ve elbette, devralınan sınıflar söz konusu olduğunda, Init'i doğru sırada düzenlemeniz gerekir.

ama genel olarak karmaşık projelerde hata işleme hakkında bir makale yazmak istiyorum, Yazdır ve burada olduğu gibi iade bir seçenek değil.

Yani, inşaat sürecini tamamlayacak ve sırayla başlatma bayrağını ayarlayacak bir doconstructor oluşturun.

Genel olarak, ofset, ancak rahatsızlıklar var. Her işlevde başlatma bayrağını yoklamanız gerekecek ve çok sayıda sınıf işleviyle bu uygun değildir.

Aniden bir şeylerin değiştirilmesi gerekecek, tüm işlevlerin yeniden yazılması gerekecek.

ZY Buradaki kodu düzenledim, yazım hatasını erittim.

 class test
  {
private :
   bool               inited;
   int                value ;
public :
                     test( void ){inited= false ;};
   bool Set( int passed){ value =passed; return ( true );};
   bool Init( int passed)
     {
       if (Set(passed))inited= true ;    
       return (inited);
     };
   int Get()
     {
       if (!inited)
        {
         Print( "Объект неинициализирован" );
         return (- 1 );
        }        
       return ( value );
     };
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {

   test var ;
   var .Init( 1 );
   Print( var .Get());

   test var2;
   Print(var2.Get());
  }
 
Urain :

Yani, inşaat sürecini tamamlayacak ve sırayla başlatma bayrağını ayarlayacak bir doconstructor oluşturun.

Genel olarak, ofset, ancak rahatsızlıklar var. Her işlevde başlatma bayrağını yoklamanız gerekecek ve çok sayıda sınıf işleviyle bu uygun değildir.

Aniden bir şeylerin değiştirilmesi gerekecek, tüm işlevlerin yeniden yazılması gerekecek.

ZY Buradaki kodu düzenledim, yazım hatasını erittim.

Ördek bir kurucu varsa, başlatmanın başarılı olduğu anlamına gelmez. başlatma gerçeğini kontrol etme ihtiyacı için

Elbette bir kez kontrol edebilirsiniz:

 void OnStart()
  {

   test var ;
   if ( ! var .Init( 1 )){
     // здесь какято обрабтка
     return ;
   };
   Print( var .Get());

   test var2;
   Print(var2.Get());
  }

ancak kendi kodunuzu kullanırsanız, arama sırasında başlatma gerçeğini kontrol etmeyi bir kural haline getirebilirsiniz ve başkaları tarafından kullanılıyorsa, talimatlara yazamazsınız: “yalnızca böyle bir kod kullanmak zorunludur. Aksi takdirde sonuçlarına kefil olamam.” Hayır, herhangi birinin sınıf yöntemlerinde başlatma kontrolleri yapması gerekiyor.

 

geliştiriciler

Yeni bir yapıyı yeniden başlattıktan hemen sonra


not

Başka bir klasöre kurulan terminalin güncellemesi başarılı oldu, listede semboller var (güncellemeden önce açık çizelge olmamasına rağmen)...

 

Bunun bir hata olup olmadığını söyle. şunları yazdı

 ENUM_ORDER_TYPE Signal[ 21 ];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   ArrayInitialize (Signal, WRONG_VALUE );
//---
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   
  }
//+------------------------------------------------------------------+

hata mesajı veriyor

'ArrayInitialize' - no one of the overloads can be applied to the function call 
 
sergey1294 :

Bunun bir hata olup olmadığını söyle. şunları yazdı

hata mesajı veriyor


Büyük olasılıkla, burada ArrayInitialize() öğesinin yalnızca belirli bir türe sahip dizileri tam sayısal (büyük olasılıkla int veya double ) olacak şekilde doldurmak üzere tasarlandığı gerçeğinden bahsediyoruz.

Dizi ENUM_ORDER_TYPE türünde olduğundan, ArrayInitialize çağrısı, böyle bir çağrı yöntemine izin verilmediğini belirten bir hata verir.

Bana göre bu durumda iki seçenek var:

1. Kodda bunu dikkate alarak ENUM_ORDER_TYPE dizi türünü int olarak değiştirin (en azından sipariş türleri int olarak kolayca temsil edilebilir);

2. Dizinin "başlatma" işlemini bağımsız olarak uygulayın.

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5