Hatalar, hatalar, sorular - sayfa 2363
![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
typedef bir konu, denedim, ama aynı zamanda çok kaba değil, yine de nerede hata yaptığınızı bulmanız gerekiyor, örneğim typedef yardımıyla çalışmalı!
Yukarıda yazdığım kod çalışması gerekir. Kendim kontrol etmek istedim ama şans yok: =))))))))))))
(1961'i inşa et)
typedef bir konu, denedim, ama aynı zamanda çok kaba değil, yine de nerede hata yaptığınızı bulmanız gerekiyor, örneğim typedef yardımıyla çalışmalı!
Veya ekstra parantez ve işaretçiler olmadan daha basit ve daha zarif hale getirebilirsiniz - (ve garip hatalar olmadan derlenir))))
Veya ekstra parantez ve işaretçiler olmadan daha basit ve daha zarif hale getirebilirsiniz - (ve garip hatalar olmadan derlenir))))
örneğiniz benim durumumda çalışmayacak, nesnelerim dinamik olarak oluşturuldu, onlara bir isim bile vermiyorum ve örneğin işaretçi adına atıfta bulunarak, şöyle denedim, derleyici atlamıyor: '[ ' - isim bekleniyor tst_cast.mq4 32 on beş
Not: Ne teklif ettiğinizi biraz anlamaya başladım ama yine de bir sonuç yok, dynamic_cast <> olmadan da yapabilirsiniz, * CObject alanını ekleyin, teorik olarak şöyle olmalı:
Dinamik_cast <> ile verdiğiniz örnekten biraz daha hızlı çalışacağını düşünüyorum - anlam aynı görünüyor
MQL'de *CObject işaretçisinin referansını kaldırmak mümkün mü?
Farklı seçenekler denedim, işte testin scripti, bağlantılı listeye 3 Myclass elemanı ekliyorum ve ardından CMyclass alanlarının değerlerini değiştiriyorum, bu şekilde çalışıyor:
ara CMyclass *sonuç işaretçisi olmadan dinamik olarak oluşturulmuş CMyclass öğelerinin kenar boşluklarını değiştirebilir miyim?
bunun gibi bir şey: (CMyclass *)(base.GetCurrentNode()).x = 99;
Not: typedef'in kullanılması gerektiğinden şüpheleniyorum, ancak şu ana kadar şans yok
Yazdıklarınız, aynı şeyin örtülü bir kullanımıdır:
Onlar. böyle anonim bir işaretçi, ama aslında sadece sözdizimsel şeker. MQL'de neredeyse hiç şeker yoktur, bu yüzden bu şekilde yapamazsınız. Ancak, bir çocuğa tür indirgemenin herhangi bir kontrol ve dönüşüm olmadan gerçekleştiğini, bu nedenle çok hızlı olduğunu, bu nedenle bir işaretçiyle açık çalışmanın sizi neden bu kadar memnun etmediği tam olarak açık değil.
Not: Ne teklif ettiğinizi biraz anlamaya başladım ama yine de bir sonuç yok, dynamic_cast <> olmadan da yapabilirsiniz, * CObject alanını ekleyin, teorik olarak şöyle olmalı:
Dinamik_cast <> ile verdiğiniz örnekten biraz daha hızlı çalışacağını düşünüyorum - anlam aynı görünüyor
Yukarıda yapmanız önerildiği gibi, ayrı bir alan olmadan, yalnızca bir operatördeki bir sarmalayıcı aracılığıyla mümkündür.
Bir fark var, küçük bir tane. Birdenbire sınıfıma dönüştürülemeyen bir nesne olduğu ortaya çıkarsa, dynamic_cast olmadan bir çalışma zamanı hatası olacaktır ve bununla birlikte - dönüşte sadece NULL. Bu, .x üzerinden hemen erişilmesi şartıyla, her durumda bir runtime hatasına neden olur, bu yüzden endişelenmenize gerek yok =)))
Tam olarak "doktorun emrettiği" gibi yaparsanız, NULL durumunda, bu hatayı işlemek için oluşturulan sınıfın özel bir örneği gibi bir şey döndürmeniz gerekir)))
not Son zamanlarda normal bir oyuncu kadrosuna kıyasla dynamic_casta'nın hızını kontrol ettim - beklenene bir sınıf eşitliği durumunda gibiydi, neredeyse aynı.
not Her durumda, for'lar orada oldukça üzgün görünüyor - listelerle çalışırken, her biri için olduğu gibi döngüler kullanmanız gerekir (döngüm gibi)derleyiciyi atlamaz: '[' - ad bekleniyor tst_cast.mq4 32 on beş
...
Aslında, bu ambalajla ne aldın? Orada tamamen gereksiz olduğunda ekstra bir dynamic_cast? Sarmalayıcının kendisinde, aynı CMyClass'a açık bir dönüşüm. Onlar. içindeki iş yükü %0'dır ve kod daha kafa karıştırıcıdır (dizin erişim operatörü, geçirilen sınıfın açık bir döküm operatörü olarak kullanılır - peki, hiç açık değil).
not Her durumda, for'lar orada oldukça üzgün görünüyor - listelerle çalışırken, her biri için olduğu gibi döngüler kullanmanız gerekir (döngüm gibi)
Üzgünüm ama bu saçmalık.
Yazdıklarınız, aynı şeyin örtülü bir kullanımıdır:
Onlar. böyle anonim bir işaretçi, ama aslında sadece sözdizimsel şeker. MQL'de neredeyse hiç şeker yoktur, bu yüzden bu şekilde yapamazsınız. Ancak, bir çocuğa tür indirgemenin herhangi bir kontrol ve dönüşüm olmadan gerçekleştiğini, bu nedenle çok hızlı olduğunu, bu nedenle bir işaretçiyle açık çalışmanın sizi neden bu kadar memnun etmediği tam olarak açık değil.
evet, tüm bunları anlıyorum, işaretçilerle çalışırken MQL'deki sözdizimini çözemiyorum, her şey standart C++ ile aynı görünüyor, ancak sürekli kafam karışıyor ve hemen yazamıyorum veya okuyamıyorum MT'nin standart teslimatından aynı kütüphanenin kodu .... Zaten tüm saçımı çıkardım! ... ama hala .op'ta! )))) - Yine de çözeceğim;)
Bir fark var, küçük bir tane. Birdenbire sınıfıma dönüştürülemeyen bir nesne olduğu ortaya çıkarsa, dynamic_cast olmadan bir çalışma zamanı hatası olacaktır ve bununla birlikte - dönüşte sadece NULL. Bu, .x üzerinden hemen erişilmesi koşuluyla her durumda bir hataya neden olacaktır.
bunların hepsi açık ve bu küçük bir fark değil, önyargısız olarak profesyonel bir programcının kodunun amatör bir koddan tam olarak bu farkla - kritik hataları kontrol etmede - farklı olduğunu söyleyeceğim .... programlama dillerindeki modern eğilimlerle birlikte bu, nihayet, vb. dışında try'ı kullanan lamerler - programcılar için basitleştirilmiştir. ;)
Üzgünüm ama bu saçmalık.
Evet lütfen
evet, tüm bunları anlıyorum, işaretçilerle çalışırken MQL'deki sözdizimini çözemiyorum, her şey standart C++ ile aynı görünüyor, ancak sürekli kafam karışıyor ve hemen yazamıyorum veya okuyamıyorum MT'nin standart teslimatından aynı kütüphanenin kodu .... Zaten tüm saçımı çıkardım! ... ama hala .op'ta! )))) - Yine de çözeceğim;)
MQL durumunda C++'ı kılavuz olarak almak işe yaramaz :) MQL'de imkansız olanın hacmi, "uyumlu" yapıların hacminden çok daha büyüktür. IMHO, MQL daha çok sözdizimsel şeker içermeyen çok soyulmuş bir C# gibidir.