Genel sınıflar kütüphanesi - hatalar, açıklamalar, sorular, kullanım özellikleri ve öneriler - sayfa 25
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Yalnızca yerleşik türler için uygunlarsa, neden koleksiyonlar oluşturup bunları kod tabanına koyalım?)
gömme yapılar için de uygun değildirler.
Söyle bana, belki bir şey anlamıyorum, ama bu tür bir yapı kullanmaya çalışırsam:
sonra hatayı alıyorum:
'Seçenek' - nesneler yalnızca referans olarak iletilir ICollection.mqh on dört on sekiz
peki, daha fazla hata yığını var ...bu şekilde olmaz şablon şablonlar üzerinden yapman lazım bu konuyu ben de hallettim o yüzden kendime bir test örneği yaptım herşey doğru gibi
class CData - listede saklamak istediğimiz yapı
CDataBase - listenin kendisi
OnStart() içinde - bir liste oluşturuyoruz, ona değerler yazıyoruz ve sonra okuyoruz, 2 kez kontrol ediyorum çünkü ilk başta, bir yerde listeye yazarken yerel bir değişkenin görünürlüğünü kaybettim - her şeyi tamam yazdım ve okuduğumda sıfır işaretçileri okudum ve bir hata aldım
bu şekilde olmaz şablon şablonlar üzerinden yapman lazım bu konuyu ben de hallettim o yüzden kendime bir test örneği yaptım herşey doğru gibi
class CData - listede saklamak istediğimiz yapı
CDataBase - listenin kendisi
OnStart() içinde - bir liste oluşturuyoruz, ona değerler yazıyoruz ve sonra okuyoruz, 2 kez kontrol ediyorum çünkü ilk başta, bir yerde listeye yazarken yerel bir değişkenin görünürlüğünü kaybettim - her şeyi tamam yazdım ve okuduğumda sıfır işaretçileri okudum ve bir hata aldım
Bu kod sizin için çalışır, çünkü CData hala bir sınıftır ve bir yapı değildir. Sınıflar ve yapılar için aynı anda jenerik kullanmaya çalışırsanız, özellikle silme operatörü ile ilgili sorunlar hemen ortaya çıkacaktır. Bu "jenerik" ile yaptığım deneylerde buna ikna oldum. Sonuç olarak, bu "jenerik" lib'de hiçbir silme operatörü yoktur ve böyle bir "koleksiyona" yeni bir sınıf tıklarsanız, programdan çıktıktan sonra bir sürü kayıp nesne olacaktır. Onlar. Bu jeneriğin başlangıçta yalnızca ilkel türler için yazıldığı görülmektedir.
Bu kod sizin için çalışır, çünkü CData hala bir sınıftır ve bir yapı değildir. Sınıflar ve yapılar için aynı anda jenerik kullanmaya çalışırsanız, özellikle silme operatörü ile ilgili sorunlar hemen ortaya çıkacaktır. Bu "jenerik" ile yaptığım deneylerde buna ikna oldum. Sonuç olarak, bu "genel" lib'de hiçbir silme operatörü yoktur ve böyle bir "koleksiyona" yeni bir sınıf tıklarsanız, programdan çıktıktan sonra bir sürü kayıp nesne olacaktır. Onlar. Bu jeneriğin başlangıçta yalnızca ilkel türler için yazıldığı görülmektedir.
Tabii ki bu bir sınıf, yapı değil, MQL'de yapıları kullanmayı bıraktım, yapılar herhangi bir avantaj sağlamıyor, ancak yapılarla çalışırken sürekli hatalar ve zaman kaybı, adminlerden yapılarla ilgili sorulara eski mesajlar verdiler, temel olarak cevap verdiler, yapılar yerine bir sınıf kullandılar - şimdi yapıları hiç kullanmıyorum
Not: Yapıları kullanmayı bıraktığımda buldum https://www.mql5.com/en/forum/6343/page866#comment_7541747
Yalnızca yerleşik türler için uygunsa neden koleksiyonlar oluşturup bunları kod tabanına koyalım?)
Standart teslimatta sağlanan kolaylık. Bu nedenle, çekmeye gerek yoktur - her kullanıcıda vardır.
Bunu KB-lib'lerimden birinde uzun süredir kullanıyorum.
bu şekilde olmaz şablon şablonlar üzerinden yapman lazım bu konuyu ben de hallettim o yüzden kendime bir test örneği yaptım herşey doğru gibi
class CData - listede saklamak istediğimiz yapı
CDataBase - listenin kendisi
OnStart() içinde - bir liste oluşturuyoruz, ona değerler yazıyoruz ve sonra okuyoruz, 2 kez kontrol ediyorum çünkü ilk başta, bir yerde listeye yazarken yerel bir değişkenin görünürlüğünü kaybettim - her şeyi tamam yazdım ve okuduğumda sıfır işaretçileri okudum ve bir hata aldım
Her şeyden önce, ayırıcınızı listeye uyguladınız ve işaretçileri orada depoladınız. Sadece bu değil, yok edildiğinde sızıntılarınız var)
İkincisi, doğru olana göre, bunu atama operatörü değil, kopya oluşturucu aracılığıyla yapmak gerekiyordu. Ama hepsi bu kadar IMHO)
Ve en önemlisi: geliştiricilerin yalnızca jenerikleri tamamlaması, ayırıcıları içeride yapması ve özel nesneler için desteklemesi gerekir. C++ zaten onlar için her şeyi icat etti) Ve bizim bisiklet icat etmemize gerek yok.
Her şeyden önce, ayırıcınızı listeye uyguladınız ve işaretçileri orada depoladınız. Sadece bu değil, yok edildiğinde sızıntılarınız var)
Sızıntılar nasıl belirlenir?
Not: bu bir test örneği, MQL'de listelerle nasıl çalışılacağını bulmam gerekiyordu, bu yüzden testler yaptım
Ve en önemlisi: geliştiricilerin yalnızca jenerikleri tamamlaması, ayırıcıları içeride yapması ve özel nesneler için desteklemesi gerekir. C++ zaten onlar için her şeyi icat etti) Ve bizim bisiklet icat etmemize gerek yok.
her şey bu kadar basitse yaz
Sızıntılar nasıl belirlenir?
Not: bu bir test örneği, MQL'de listelerle nasıl çalışılacağını bulmam gerekiyordu, bu yüzden testler yaptım
AddValue'da nesnelerin kopyalarını yeni ile yaratırsınız, ancak onları yıkıcıda serbest bırakmazsınız, sadece işaretçiler listesini temizlersiniz.
her şey bu kadar basitse yaz
Zaman ve zorunluluk olacak - yazacağım. Genel olarak, örnek olarak, yalnızca bir rulman modeline ihtiyacınız varsa, kendi rulman fabrikanızı oluşturmak iyi bir konu değildir)