MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1097

 
Seric29 :

İşlev işaretçisi parametre olarak iletilir. Sınıflarda kimsenin nasıl yapılacağını çözemediğini görüyorum. Ayrıca, verdiği sınıfa neden bir işaretçi döndürmeniz gerektiğini hala anlamıyorum.

İşte ilginç örnekler, ama bu benim sorum değil

Dizinde de benzer bir şey gördüm ama bu siteleri çoktan kapattım. ellerim ağrıyor ve iş yapılması gerekiyor.

Bu kadar basit bir görevle neden uğraşasınız ki? Sonuçta, gerekli verileri bir sınıf nesnesi aracılığıyla kolayca elde edebilirsiniz.

Referanslara, işaretçilere ve işlev işaretçilerine aşinayım, ancak bunları nadiren pratikte kullanıyorum. Ve genel olarak, bana gelince, sadece RAM'den tasarruf etmek için ihtiyaç duyuyorlar - ve göstergeli danışmanlar oyun değil, bu nedenle küresel kapsamda sıradan değişkenler ve sınıf nesneleriyle başa çıkabilirsiniz.

 
Alexandr Sokolov :

Neden bu kadar basit bir görevle uğraşıyorsunuz? Sonuçta, gerekli verileri bir sınıf nesnesi aracılığıyla kolayca elde edebilirsiniz.

Referanslara, işaretçilere ve işlev işaretçilerine aşinayım, ancak bunları nadiren pratikte kullanıyorum. Ve genel olarak, bana gelince, sadece RAM'den tasarruf etmek için ihtiyaç duyuyorlar - ve göstergeli danışmanlar oyun değil, bu nedenle küresel kapsamda sıradan değişkenler ve sınıf nesneleriyle başa çıkabilirsiniz.

Basit bir görevde akıllı olmak istemiyorum ve tabii ki programlarımı işlevin daha önce çağrıldığı yerde yeniden yapıyorum, hesaplamaları kolaylaştırmak için aritmetik bir ifade yazıyorum veya basitleştirilmiş aşırı yüklenmiş bir işleve geçiyorum, bu yüzden çevirmek istiyorum programı sınıflara ayırınız. Ama yukarıda yazdığınız gibi, onları nadiren kullanıyorsunuz ve şimdi bir sınıf meselesi var, ancak bu sınıfın işlevlerine işaretçiler oluşturamıyorsunuz, neden böyle bir programlama gerekli, bir şey yaparsanız yapamazsınız. başka, o zaman yapamazsınız, bu programlama değil, ama şeytan ne olduğunu biliyor.

 
Seric29 :

Basit bir görevde akıllı olmak istemiyorum ve tabii ki programlarımı işlevin daha önce çağrıldığı yerde yeniden yapıyorum, hesaplamaları kolaylaştırmak için aritmetik bir ifade yazıyorum veya basitleştirilmiş aşırı yüklenmiş bir işleve geçiyorum, bu yüzden çevirmek istiyorum programı sınıflara ayırınız. Ama yukarıda yazdığınız gibi, onları nadiren kullanıyorsunuz ve şimdi bir sınıf meselesi var, ancak bu sınıfın işlevlerine işaretçiler oluşturamıyorsunuz, neden böyle bir programlama gerekli, bir şey yaparsanız yapamazsınız. başka, o zaman yapamazsınız, bu programlama değil, ama şeytan ne olduğunu biliyor.

Sınıf, bazı nesneler için bir şablondur ve bu şablondaki işlevselliği kullanmak için önce bir nesne oluşturmalısınız.

Aslında, sınıf adı int, double, string vb. gibi bir veri türü gibi davranır. ancak genişletilmiş işlevsellik ile. Türünü belirtmeden bir değişken bildiremezsiniz.

Bunun yanı sıra, işlevi sınıftan basitçe çözebilirsiniz ve bir nesne oluşturmadan sınıfta ve sınıftan ayrı olarak kullanılabilir.

 

Dosyanın ilgili klasörden kaldırılması dışında, göstergenin çalışmamasının başka bir nedeni olabilir mi? (gösterge derlenir ve bir terminalde çalışır, ancak diğerinde çalışmaz)


 
Alexandr Sokolov :

Sınıf, bazı nesneler için bir şablondur ve bu şablondaki işlevselliği kullanmak için önce bir nesne oluşturmalısınız.

Aslında, sınıf adı int, double, string vb. gibi bir veri türü gibi davranır. ancak genişletilmiş işlevsellik ile. Türünü belirtmeden bir değişken bildiremezsiniz.

Bunun yanı sıra, işlevi sınıftan basitçe çözebilirsiniz ve bir nesne oluşturmadan sınıfta ve sınıftan ayrı olarak kullanılabilir.

Pekala belki. Sadece sınıflar karmaşık bir konu ve referans kitabında aktarma, bağlantı ve işaretçi oluşturma ile ilgili birçok örnek var, bence mümkün (en azından c++'da mümkün, ama mql4'ün c++ ile ilgisi yok) ), burada nasıl çalıştığını anlamanız gerekiyor. Bu örnekler yardımda verilmiş, çok karmaşık ve aşırı yüklenmişler, bir ders alıp basit bir örnek göstermek yerine gereksiz hesaplamalar ve bilgilerle aşırı yüklemişler ve ne anlama geldiklerini anlayamıyorum, tüm bu linkleri şuradan kapattım. yorgunluk ve bitkinlik. Tamam, bu yüzden fonksiyonları sınıftan çekeceğim.

 
Alexandr Sokolov :

Dosyanın ilgili klasörden kaldırılması dışında, göstergenin çalışmamasının başka bir nedeni olabilir mi? (gösterge derlenir ve bir terminalde çalışır, ancak diğerinde çalışmaz)


Pazardan mı?

 
Alexandr Sokolov :

Dosyanın ilgili klasörden kaldırılması dışında, göstergenin çalışmamasının başka bir nedeni olabilir mi? (gösterge derlenir ve bir terminalde çalışır, ancak diğerinde çalışmaz)


terminalin ve uzmanların günlüğünde mesajlara bakın

Ekran görüntüsünüz yalnızca bu göstergenin kaynağı olmadığını gösteriyor

 
Alexandr Sokolov :

Dosyanın ilgili klasörden kaldırılması dışında, göstergenin çalışmamasının başka bir nedeni olabilir mi? (gösterge derlenir ve bir terminalde çalışır, ancak diğerinde çalışmaz)


Belki ek kütüphanelere ihtiyacı vardır
 
Сергей Таболин :

Pazardan mı?

Değil

Igor Makanu :

terminalin ve uzmanların günlüğünde mesajlara bakın

Ekran görüntüsünüz yalnızca bu göstergenin kaynağı olmadığını gösteriyor

teşekkürler

MakarFX :
Belki ek kütüphanelere ihtiyacı vardır

Kesinlikle hayır, ben yazdım - bilirdim

 

Lütfen bana derleyicinin kontrol komut dosyasının aşağıdaki MQL4 kodunda neden bir uyarı verdiğini söyleyin:

 #property strict

struct st_sig {
   string    sym;           // Symbol
   int       age;           // Bars ago
}; st_sig Signals[];

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart () {

   BubbleSort(Signals);
   
}

//+----------------------------------------------------------------------------+
void BubbleSort(st_sig &sig[]) {
   double t;
   int     i, j, n= ArraySize (sig);

   for (i=n- 1 ; i> 0 ; i--) {
     for (j= 0 ; j<i; j++) {
       if (sig[j].age>sig[j+ 1 ].age) {
        t=sig[j].age;
        sig[j].age=sig[j+ 1 ].age;
        sig[j+ 1 ].age=t;       // Line#27 with warning
      }
    }
  }
}

27. satırda veri türü uyuşmazlığı hakkında uyarı. Her iki değişken de aynı tip int'dir. Aşağıda, betiğin derlenmesinin bir ekran görüntüsü bulunmaktadır.

27. satırı değiştirirsem

sig[j+ 1 ].age=( int )t;

sonra uyarı kaybolur.

Odak nedir?