Hatalar, hatalar, sorular - sayfa 2271
![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
Derleme sırasında hata:
Ve (1)(2) ve (3)(4) arasındaki temel fark nedir???
(3)(4) sınıflarını işlevlerin dışında bildirirseniz, hata oluşmaz. Bir fonksiyon içinde bildirilirse oluşur.
Aşağıdaki davranışa ne sebep olabilir?
derlerseniz gösterge düzgün çalışır, yeniden derlerseniz gösterge düzgün çalışmıyor. Test cihazında düzgün çalışıyor mu?
Ne göstergesi?
C++ burada ne çıktı verir ?
Bunun MQL5'te çalışması için aynı değil iki farklı çıktı diziniz olması gerekir. Ama o zaman imzaların oluşumu için tamamen farklı bir mekanizma olmalı. C++ aynı sonucu yazdırırsa, __FUNCSIG__ fiyatı önemli ölçüde düşer.
Sonuç: C++
void f<g1::A>( g1::A& )
void f<g2::A>( g2::A& )
Gördüğünüz gibi satırlar farklı... fonksiyon imzası kullanılıyor
Sonuç: C++
void f<g1::A>( g1::A& )
void f<g2::A>( g2::A& )
Gördüğünüz gibi satırlar farklı... fonksiyon imzası kullanılıyor
MQL5 sorunları
void f<A>(A&)
Onlar. fonksiyonun içinde sınıf imzası yoktur. Bir gün desteklenecektir.
Ve eğer sınıf global ise, o zaman C++ hangi satırın çıktısını verir?
void f<::A>( ::A& )
void f<A>( A& )
MQL5 sorunları
Onlar. fonksiyonun içinde sınıf imzası yoktur. Bir gün desteklenecektir.
Eski C++ derleyicileri bunu desteklemiyorsa, kaynak kodunda zaten ilk satırda (1) bir hata veriyorlar. Bu nedenle, başlangıçta soru şu şekilde sorulmuştur: Neden bir durumda bir hata var, diğerinde normal?
Her iki durumda da aynı davranış bekleniyordu: ya bir hata ya da hata yok. Ve hata, destek eksikliğinde değil, eşit olmayan davranışta, diğer tüm şeylerin eşit olmasındadır ( bu örnekte olduğu gibi)
Ve eğer sınıf global ise, o zaman C++ hangi satırın çıktısını verir?
void f<::A>( ::A& )
void f<A>( A& )
İkinci seçenek
Eski C++ derleyicileri bunu desteklemiyorsa, kaynak kodunda zaten ilk satırda (1) bir hata veriyorlar. Bu nedenle, başlangıçta soru şu şekilde sorulmuştur: Neden bir durumda bir hata var, diğerinde normal?
Her iki durumda da aynı davranış bekleniyordu: ya bir hata ya da hata yok. Ve hata, destek eksikliğinde değil, eşit olmayan davranışta, diğer tüm şeylerin eşit olmasındadır ( bu örnekte olduğu gibi)
Yani bu anlaşılabilir. Derleyici, kod boyunca yukarıdan aşağıya doğru gider ve ilerledikçe uygun imzaları üretir. İlk imzayı sorunsuz oluşturdu. İkinciye geliyor - ve bu zaten var. İşte ikinci satırdaki hata.
(3)(4) sınıflarını işlevlerin dışında bildirirseniz, hata oluşmaz. Bir fonksiyon içinde bildirilirse oluşur.
ile ikame edilmiş
o zaman fonksiyon içinde hata yok ... ve temel fark nedir?
Yani bu anlaşılabilir. Derleyici, kod boyunca yukarıdan aşağıya doğru gider ve ilerledikçe uygun imzaları üretir. İlk imzayı sorunsuz oluşturdu. İkinciye geliyor - ve bu zaten var. İşte ikinci satırdaki hata.
Ve neden hatasız MQL'de derleniyor?
Sonuç: MQL C++
void f<A>() void f<g1::A>()
void f<A>() void f<g2::A>()
İmzalar neden burada müdahale olmadan yaratılıyor?
Ve neden hatasız MQL'de derleniyor?
Sonuç: MQL C++
void f<A>() void f<g1::A>()
void f<A>() void f<g2::A>()
İmzalar neden burada müdahale olmadan yaratılıyor?
Biri yaratılıyor. Üstelik f'de T'yi kullanamazsınız. Genel olarak durum bana göre açık.