Hatalar, hatalar, sorular - sayfa 2471
![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
Bir CChartObjectLabel oluştururken göstergedeki nesnelerin neden başlatmadan arındırma sırasında silinmediğini aşağıdaki kodda açıklayın:
TF'yi değiştirirken bir günlük girişi alıyorum: 2019.05.23 09:49:02.044 tstlabel EURUSD,M30: CChartObjectLabel türünde 2 nesne kaldı
OnInit()'te metin etiketlerinin ( CChartObjectLabel ) oluşturulmasını iptal ederseniz, her şey doğru şekilde çalışacaktır.
CreateLabel() işlevine bir işaretçi iletiyorum ve sonra bir nedenden dolayı onu OnDeinit() içinde silmek mümkün değil
Yeni bir nesne l oluşturulur. Ve o kaldırılmaz.
mantıklı
ancak değişkenlerin kapsamı CChartObjectLabel *LabelUP,*LabelDN; küresel var mı?
böylece kodun herhangi bir bölümündeki değişkeni değiştirebilir miyim?
CreateLabel() işlevine bir işaretçi iletiyorum, neden yeni bir kopya oluşturuyorum?
IMHO, bu doğru çalışmıyor.
Not: OnInit()'te nesneler yaratır ve sonra onlarla CreateLabel()'de çalışırsanız (yani, nesneleri ayrı ayrı oluştururum ve bunlarla işaretçi ile çalışırım), o zaman her şey doğru şekilde çalışır - ama durumu hatırlamıyorum diğer derleyicilerde f-tion'da işaretçiyi aktarmak için yeni bir nesne yarattı - işaretçi o ve Afrika'da işaretçi!
mantıklı
ama değişken kapsamım küresel mi? - böylece kodun herhangi bir bölümündeki değişkeni değiştirebilir miyim?
CreateLabel() işlevine bir işaretçi iletiyorum, neden yeni bir kopya oluşturuyorum?
IMHO, bu doğru çalışmıyor.
mantıklı
ancak değişkenlerin kapsamı CChartObjectLabel *LabelUP,*LabelDN; küresel var mı?
böylece kodun herhangi bir bölümündeki değişkeni değiştirebilir miyim?
CreateLabel() işlevine bir işaretçi iletiyorum, neden yeni bir kopya oluşturuyorum?
IMHO, düzgün çalışmıyor.
Yeni bir nesneye bir işaretçi atayarak, yeniden atanan işaretçi tarafından işaret edilen önceki nesneyi kaybederiz.
hayır, bir işaretçi bir işaretçidir, MQL'de bir tanımlayıcıdır, mesele bu değil - ancak bir nesnenin yeni bir kopyasını oluşturmak doğru değil, şu anda böyle çalışıyor:
ancak mantığınızı takip ederseniz, bu kodda SetLabel () işlevinde l nesnesinin bir kopyası oluşturulacaktır - Bağlantıyı değil işaretçiyi geçtim mi?
yeni kaldırılmalıdır. Nesneler zaten oradadır ve onlara işaret eder.
soru, sorunun nasıl çözüleceği değil, neden CChartObjectLabel *LabelUP,*LabelDN değişkeninin global kapsamı ile ; - Kayıp işaretçi!
hayır, bir işaretçi bir işaretçidir, MQL'de bir tanımlayıcıdır, mesele bu değil - ancak bir nesnenin yeni bir kopyasını oluşturmak doğru değil, şu anda böyle çalışıyor:
ancak mantığınızı takip ederseniz, bu kodda SetLabel () işlevinde l nesnesinin bir kopyası oluşturulacaktır - Bağlantıyı değil işaretçiyi geçtim mi?
Numara. Burada l, gerekli işaretçiyi içinden geçirdiğimiz yöntemin parametresidir. Burada her şey iyi. Burada işaretçi önceden oluşturulmuş nesne üzerinde kalır. Yeni bir nesne oluşturma ve önceki nesnenin kaybıyla bir işaretçinin yeniden atanması yoktur.
hala düzgün çalışmıyor
MQL'deki bu "işaretçiler" sınıfın kapsamında çalışmak üzere tasarlanmıştır, bir sınıf oluşturmak istemiyorum, küresel görünürlükte bir işaretçi alıp beyan ediyorum, sonra onu herhangi bir işleve iletiyorum ve içinde bu işlev bir nesne tanımlayıcısı oluşturuyorum, işlevin yerel görünürlüğünü terk ederken nesneyi yok etmek için bir neden yok
şimdi biraz meşgul ama grafiksiz test senaryoları yapmam gerekiyor - aynı sıkıntı olacağını düşünüyorum, eğer fonksiyona POINTER_INVALID değerine sahip bir pointer ile girerseniz, aynı POINTER_INVALID ile çıkacaksınız, evet, her şey olacak doğru çalışın, ancak referans olarak POINTER_INVALID ile bir işaretçiyi geçemeyeceğiniz gibi - işaretçiye erişirken bir hata olacak
hala düzgün çalışmıyor
MQL'deki bu "işaretçiler" sınıf kapsamında çalışmak üzere tasarlanmıştır, bir sınıf oluşturmak, küresel görünürlükte bir işaretçiyi delmek ve bildirmek, ardından herhangi bir işleve geçirmek istemiyorum ve bu işlevde yarattığım gerçeği bir nesne tanımlayıcısı, işlevin yerel görünürlüğünü terk ederken nesneyi yok etmek için bir neden yoktur
şimdi biraz meşgul ama grafiksiz test senaryoları yapmam gerekiyor - aynı sıkıntının olacağını düşünüyorum, eğer fonksiyona POINTER_INVALID değerine sahip bir pointer ile girerseniz, aynı POINTER_INVALID ile çıkacaksınız, evet, her şey olacak doğru çalışın, ancak referans olarak POINTER_INVALID ile bir işaretçiyi geçemeyeceğiniz gibi - işaretçiye erişirken bir hata olacak
Bir şablon işlevine işaretçi ile typedef bildirme olasılığını bulduğuma şaşırdım.
Ancak mutluluk uzun sürmedi.
typedef bir şablon işlevine işaretçi ile planlanmış bir özellik mi?
typedef void (* callback)( int &); template < typename T> void ff(T &){} void OnStart (){ int a = 0 ; //ff(a); // если раскомментировать, то работает callback f_ptr = ff< int >; // 'ff<int>' - function must have a body f_ptr(a); }
Bir typedef ile çalışırken, açık bir uzmanlığa sahip şablonlu bir işlev kullanmak, şablonlu işlevin oluşturulmasına neden olmaz.