Hatalar, hatalar, sorular - sayfa 1357
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
Bu arada yukarıdaki koddan bir şey anlamadım, operatör== nerede çağrılacak? Sadece iki uzun karşılaştırma var ve hepsi bu
class A { public : bool operator ==( const A& ) { Print(__FUNCTION__); return true; } }; class B {}; void OnStart () { bool res; A *a1, *a2; B *b1, *b2; res = a1 == a2; //сейчас сравниваются указатели //предлагается вызывать operator==() res = b1 == b2; //сравниваются указатели (предложение здесь ничего не меняет, поскольку нет B::operator==) res = IsEqualPointer( a1, a2 ); //сравниваются указатели }
IsEqualPointer, bir şablon veya ::GetPointer gibi genel bir işlev olabilir....
IsEqualPointer, bir şablon veya ::GetPointer gibi genel bir işlev olabilir.
Seni anlamaktan tamamen vazgeçtiğim bir şey. Ne yapmaya çalıştığınızı meslekten olmayanların terimleriyle açıklayabilir misiniz? Yukarıdaki kodda hatalar var (== operatörünün ne argümanı ne de dönüş değeri var), tüm bunlardan bir şey anlamak zor.
Hemen belirtmeliyim ki pointer karşılaştırma/atama sorunu hiç ortaya çıkmadı bunun için GetPointer (a) == GetPointer (b) yeterlidir. Bu nedenle, görev yalnızca nesnelerin kendilerinin karşılaştırmasını/atamasını ifade eder. Onlar. bu nesnelerin işaretçiler veya bağlantılarla temsil edilip edilmediğine bakılmaksızın bu işlemleri gerçekleştirmesi garanti edilir.
Yukarıdaki kodda hatalar var (== operatörünün ne argümanı ne de dönüş değeri var), tüm bunlardan bir şey anlamak zor.
GetPointer(a)==GetPointer(b), a.operator==( b )'nin çağrılmasına neden olacak
Bu arada, ilk durumda bir nesneye açıkça erişme ve ikinci durumda (hantal GetPointer yerine) nesne işaretçisini alma olasılığı için * ve & operatörlerinin MQL'ye eklenmesine ne dersiniz? Ve yıldız işareti basitçe umutsuzca gereklidir. Dilde yerini alacak bir şey yok. Bu olmadan, A100'ün biraz daha yukarıda belirttiği gibi, nesnelerin kendileri yerine bazı eylemlerin işaretçilerle gerçekleştirildiği gibi durumları kontrol etmek imkansızdır. Şahsen benim için bu sürekli bir sorun, her zaman tetikte olmalıyım veya her yerde A.operator=(B), A.operator!=(B)'yi açıkça belirtmeliyim, yani. özlülük kaybolur ve operatör aşırı yüklemesi aslında anlamını kaybeder.
Bir şekilde bu sorunu zaten gündeme getirdim, ancak konu öldü. Sonunda bu soruyu bitirelim.
Buna katılıyorum, bu konuyu mutlaka gündeme getireceğim ve tartışacağız.
Nasıl oluyor?
...
Operatör== operatörünü< ile eşitlerseniz, sonuç eşitlenir
Sevgili, peki, ne teklif ettiğini kontrol etmedin bile! Önceki durumda olduğu gibi, kodda bariz hatalar olduğunda, yani. derlemeye çalışmadın bile. Dizlerinin üstüne bir şeyler karaladılar, kendi düşünceleri, "Ben nazikken çınla, yazık değil" gibi... Mümkün mü? Böyle saçmalıklara girmeyelim.
Ben kendim sürekli olarak işaretçileri ve aşırı yükleme operatörlerini karşılaştırıyorum ve şu anda hayalini kurduğunuz bir şey hiç olmadı. Ve şimdi, kodunuzu kontrol ettikten sonra, hiçbir mucize olmadı, == operatörü olması gerektiği gibi başlamıyor.
Ve şimdi, kodunuzu kontrol ettikten sonra, hiçbir mucize olmadı, == operatörü olması gerektiği gibi başlamıyor.
Teklifin özü sadece çalıştırmaktır.
Bu neden başka? Her şey baş aşağı.
Tam tersi daha mantıklı: < ve > işaretçilerin karşılaştırılmasına yol açar.