Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım 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
şöyle yaptım:
Ancak bazı nedenlerden dolayı derleme sırasında çok fazla hata var. Sorun nedir?
Oldukça basit bir Myers Singleton'ı MQL4++'a aktarma girişimi, örneğin şöyle görünebilir:
Yürütme sonucu:
Statik singleton() yönteminde, Symbol_Properties türünde statik bir değişken oluşturulur, ancak derleme sırasında, yöntem statik olmasına rağmen özel üyeler de dahil olmak üzere tüm üyelere erişime sahip olduğundan, bir Geçersiz varsayılan kurucu çağrı erişim hatası verilir. Bu nedenle, MQL4++ uygulamasındaki bir hata nedeniyle, bu yapıcının halka açık olarak yerleştirilmesi gerekiyordu. Düzeltirlerse, artık yapılmasına gerek kalmayacak.
Yürütmenin sonucu, change() çağrısından sonra verilerin değiştiğini gösterir. Bu dolaylı olarak, kendi içindeki change() işlevinin OnStart()'ta alınan aynı nesnenin adresini aldığını gösterir.
Şimdi, MQL4++'daki bir hata nedeniyle, bu bir Singleton değildir, çünkü varsayılan kurucunun public olması nedeniyle bu tür birçok nesne oluşturulabilir. Hata düzeltilirse ve varsayılan kurucu özel bölüme yerleştirildikten sonra, Myers' Singleton'ın MQL4++ içinde tam teşekküllü bir uygulaması haline gelecektir.
2 günlük ıstırabın statik ve sınıfta farklı davrandığını anlamadın mı???
yol boyunca, yapılar C'den alındı ve kalıtım açısından sadece biraz pompalandı,
sallanan sınıflar, dolu.
Bu nedenle, yapılarda statik bir değişken için yer ayırmak gerekli değildir.
ve sınıflarda aksi takdirde yer ayırtmak gerekir:
Bu doğru değil, bu harika MQL4++ derleyicisi farklı davranıyor. Davranış "hizalanmış" olduğundan, yalnızca nesnenin bir örneğini oluşturmanız gerekir:
Bazı nedenlerden dolayı, bu derlenmiyor (birinci ve üçüncü uyarılar ve burada ikincisi tam teşekküllü bir hatadır):
Öyleyse yapılarda "statik bir değişken için yer" ayırmak gerekli midir?
Ve terminalin / derleyicinin bir sonraki sürümünde - aynı olacak mı (sürüm değiştirirken önceden yazılmış her şeyi düzeltmek için acele etmemek için)?
Kapsüllemeyi unutmuşum. Ve silebilirsiniz. Ancak burada sabit işaretçiler yoktur) Ve genel olarak, singleton en iyi model değildir.
Bazı şablonlara sahip olmak iyidir. Dersler için, belki de sadece bir rüya.
Eh, o en kötüsü ya da en iyisi, yargılamayacağım.
Tartışmanın katılımcılarına hatırlatmama izin verin, yukarıda tekrar tekrar bahsedilen BELLEK YÖNETİMİ MODLARI - Otomatik, Dinamik, Statik, Tabanlı - OOP ne kadar güçlü olursa olsun şablonlara uygulanamaz.
Şimdi, MQL4++'daki bir hata nedeniyle, bu bir Singleton değildir, çünkü varsayılan kurucunun public olması nedeniyle bu tür birçok nesne oluşturulabilir. Hata düzeltilirse ve varsayılan kurucu özel bölüme yerleştirildikten sonra, Myers' Singleton'ın MQL4++ içinde tam teşekküllü bir uygulaması haline gelecektir.
Teşekkürler, burada bir işaretçi alabileceğinizi bilmiyordum.
Kodla bir şey yaptın, daha basit olabilir, ne yazık ki şablon yok.
kodu yapıştıramıyorum
sınıf Singleton{
özel:
sınıf BazıSınıf{
halka açık:
int a;
};
Tekton(){}
~Singleton(){}
halka açık:
statik SomeClass* Örnek(){
statik SomeClass a();
GetPointer(a) döndür;
}
};
OnStart() geçersiz
{
SomeClass* some_ptr = Singleton::Instance();
bazı_ptr.a = 5;
Uyarı(some_ptr.a);
}
Teşekkürler, burada bir işaretçi alabileceğinizi bilmiyordum.
Kodla bir şey yaptın, daha basit olabilir, ne yazık ki şablon yok.
kodu yapıştıramıyorum
sınıf Singleton{
özel:
sınıf BazıSınıf{
halka açık:
int a;
};
Tekton(){}
~Singleton(){}
halka açık:
statik SomeClass* Örnek(){
statik SomeClass a();
GetPointer(a) döndür;
}
};
OnStart() geçersiz
{
SomeClass* some_ptr = Singleton::Instance();
bazı_ptr.a = 5;
Uyarı(some_ptr.a);
}
İşte C++ için Myers kodu:
Ve işte, MQL4++'a çevrilmiş ve örnekte sınıfın teknik parçası olan aynı kod:
Buradaki "bilgelik" nerede?
Örneğiniz MQL4++ derleyicisinin hatalarından yararlanıyor, özellikle OnStart()'ta SomeClass türünün kullanılması yasa dışıdır, çünkü bu Singleton sınıfının iç içe geçmiş bir türü ve "yetişkin" derleyici hatayı anında algılar:
Ancak, bu çok temel bir nokta değildir, çünkü iç içe tip doğru bir şekilde belirtilebilir. Çok daha temel olarak, SomeClass türü Singleton sınıfının özel bölümünde bildirilir ve bu nedenle SomeClass'ın OnStart () içinde kullanımı artık temelde yasa dışıdır, "yetişkin" derleyici hemen bildirir:
Uygulamanız, MQL4++ derleyicisi erişim denetimi ile orjiyi düzeltmezse çalışacaktır.
1. Maers, Maers değil, fark nedir ... ayy, asıl şey kodun çalışması ve ihtiyaç duyduğu şeyi ve hatasız yapmasıdır MQL 'de ++ 'da değil.
2. Kodunuz doğru olanı yapıyor mu? Hayır, nokta. Servis masasına neden bu kadar çok sızlanma olduğunu yazın, herkes zaten her şeyi anladı, kim istedi ve yapabilirdi.
3. Örneğim, MQL'de hataları (C++ ile ilgili olarak) atlamanın bir yolunu gösterdi, eğer bir şeyden hoşlanmıyorsanız, 1. ve 2. noktalara bakın.
4. Özel bir sınıfa işaretçi oluşturma ile ilgili olarak - evet, bu bir MQL bobble'ıdır, ancak türü kendi kendine belirleyecek bir otomatik yoktur, bu nedenle böyle çalışması iyi olur. \
(Not: Otomatik hesapta fazla ileri gitmiş olabilirim, kontrol etmeniz gerekiyor)
5. MQL'de bir nesne elde etmek için bir işaretçinin referansını kaldırmanın bir yolunu bulamadım, bu yüzden özel kopya oluşturucu ve atama operatörünün gereksiz olduğunu düşünüyorum.
onları kullanmaya çalışın, bir yolunu görmekten memnun olacağım))
1. Maers, Maers değil, fark nedir ... ayy, asıl şey kodun çalışması ve ihtiyaç duyduğu şeyi ve hatasız yapmasıdır MQL 'de ++ 'da değil.
2. Kodunuz doğru olanı yapıyor mu? Hayır, nokta. Servis masasına neden bu kadar çok sızlanma olduğunu yazın, herkes zaten her şeyi anladı, kim istedi ve yapabilirdi.
3. Örneğim, MQL'de hataları (C++ ile ilgili olarak) atlamanın bir yolunu gösterdi, eğer bir şeyden hoşlanmıyorsanız, 1. ve 2. noktalara bakın.
4. Özel bir sınıfa işaretçi oluşturma ile ilgili olarak - evet, bu bir MQL bobble'ıdır, ancak türü kendi kendine belirleyecek bir otomatik yoktur, bu nedenle böyle çalışması iyi olur. \
(Not: Otomatik hesapta fazla ileri gitmiş olabilirim, kontrol etmeniz gerekiyor)
5. MQL'de bir nesne elde etmek için bir işaretçinin referansını kaldırmanın bir yolunu bulamadım, bu yüzden özel kopya oluşturucu ve atama operatörünün gereksiz olduğunu düşünüyorum.
onları kullanmaya çalışın, bir yolunu görmekten memnun olacağım))
1. Şimdi - yapar, ancak gerekli olanı DEĞİLDİR (açıklamalar aşağıdadır).
2. Düzeltmezlerse, yapmazlar. Ve uygulanması pek olası değildir.
3. Bu, hataları atlamanın bir yolu değil, onların sömürülmesidir.
4. Burada olmayan çok şey var.
5. Bu versiyonda, böyle şeyler mümkün olabilir, özellikle, kopya kurucunun sentezlenmediği gözümün önünden geçti gibi görünüyor, ancak bu, gelecekteki versiyonlarda sentezlenmeye başlamayacağını garanti etmiyor. Onların beyanı için genel giderler, bence, ihmal edilebilir.
Şimdi, kodunuzun neden yalnızca önceki mesajda bahsettiğim olası sorunlara sahip olmadığının, aynı zamanda neden prensipte bir singleton olmadığının ve neden olmayacağının açıklamaları, dahası, erişim ile orjiyi düzeltip düzeltmediğine bakılmaksızın:
Bu kod oldukça başarılı bir şekilde yürütülüyor:
Kaç tane singleton oluşturmayı başardığınızı görün ve bunlar AYNI ANDA var mı?
Erişime sahip seks partisi düzeltilirse, bu anlamda kodunuz için herhangi bir şey değişir mi?
Kodumda değişecek mi?
Bir düşünceyi ne kadar kategorik olarak ifade ederseniz, o kadar doğru olacağını düşünüyor musunuz?
evet, ilginiz için teşekkürler, haklısınız, bu versiyonda da singleton değil.
Örtük yapıcılar ve operatörler ile ilgili olarak - onları açık hale getirin ve kullanmaya çalışın, bana öyle geliyor ki, bir nesneye işaretçiyi yeniden adlandırmak imkansız olduğu için işe yaramayacak gibi görünüyor.
Neden çalışmıyor, 'ptr' - korumalı üye işlevi çağrılamıyor :
evet, ilginiz için teşekkürler, haklısınız, bu versiyonda da singleton değil.
Örtük yapıcılar ve operatörler ile ilgili olarak - onları açık hale getirin ve kullanmaya çalışın, bana öyle geliyor ki, bir nesneye işaretçiyi yeniden adlandırmak imkansız olduğu için işe yaramayacak gibi görünüyor.
Neden çalışmıyor, 'ptr' - korumalı üye işlevi çağrılamıyor :
Öyle görünmüyor, ama yine de bir sürü söve var. Sadece birkaçının bunu fark etmesi üzücü. Tartışmaya girmek istemiyorum, ama aslında fark çok büyük. C++'daki yapılara uygulanan bazı şeyler MKL4'te çalışmaz. Ama hiçbir şey söylemeyeceğim ... yoksa şu gibi sorular sormaya başlayacaklar:
"Neden buna ihtiyacım var".
Evet, en azından o zaman, bitmemiş bir ders kitabına giremezsiniz, ancak MKL4'te C ++ 'da neyin işe yaradığını yazın ve burada çalışıp çalışmadığını düşünmeyin. Bu aşamada başka bir şeye ihtiyacım yok...