Hatalar, hatalar, sorular - sayfa 1733

 
Комбинатор :

Bir dizi referansı, MQL'de bir referans değil, bir koltuk değneğidir.

Ve [], * gibi bir tür değiştirici ise, kendi const! bağlantı değil.

En azından sadece MQL'de bir şeyler yazmayı biliyorum.
 
A100 :
Hata haklıdır - bu tanımlayıcılar yardımda ReadOnly olarak belirtilmiştir (Chart Set Integer ile birleştirilmez ) https://www.mql5.com/en/docs/constants/chartconstants/enum_chart_property
zaten anladım, ama yine de teşekkürler :)
 
coderex :
belki bu yardımcı olur?

Çok dikkatli okudum. C++'ı anlamak MQL'den çok daha zordur. Yazıdan bir kaç şey anladım. Ve burada tartışılan şeyle nasıl bir ilişkisi olduğunu hiç anlamadım.

Yine de fırsatı sevdim

Mükemmel Yönlendirme

Ne olduğunu açıklamadan önce bir önceki standarda dönelim ve mevcut sorunu anlatalım. Bir parametre alan ve onu bar(T& bir şey) öğesine ileten bir şablon işlevimiz olduğunu varsayalım:

template < typename T>
void foo(T& Object)
{
    bar(Object);
}

Yani, her şey yolunda. Peki ya fonksiyon argümanı olarak 100 sayısını geçmek istersek?

Endişelenme, şöyle yazalım:

template < typename T>
void foo( const T& Object)
{
    bar(Object); //Ooops
}

Ancak bu durumda bir derleme hatası olacaktır, çünkü. bar sabit olmayan bir başvuruyu kabul eder. Bu nedenle, 2 bar işlevi sağlamanız gerekir - sabit ve sabit olmayan. Şimdi, işlevin birden fazla parametresi olduğunu, ancak 2,3 veya 5 olduğunu hayal edin. Böyle bir görevin uygulanmasının çok zor olduğu ortaya çıktı, çünkü (2 ^ n - 1) aşırı yüklenmiş fonksiyonlarımız var, burada n, fonksiyon argümanlarının sayısıdır . Bu sayıda parametrenin kötü stil olduğunu düşünüyorsanız ve hiç kimse böyle yazmıyorsa, std::bind, std::make_shared, vb.'ye bakın.


Şimdi yeni standardın bize hangi çözümü sağladığına bakalım:

template < typename T>
void foo(T && Object)
{
    bar(std::forward < T> (Object));
}

Yukarıdaki kodu kullanarak, parametre geçme sorunu tamamen çözülmüştür, buna mükemmel geçiş denir, çünkü. argümanın türü, dış foo işlevine ve iç işlev çubuğuna yapılan çağrılar arasında korunur. Artık birçok işlevi aşırı yüklemeye gerek yok - genel kod geliştiricileri mutlu olabilir.


Bu çözüm, şablon parametresi T&& ise, geçirilen türün kendisini koruması ve foo işlevi içindeki herhangi bir adlandırılmış türün bir değere dönüşmesi nedeniyle std::forward'ın gerekli olması nedeniyle mümkündür ve orijinal türe ihtiyacımız vardır. - std bunun için kullanılır: :forward, argümanın orijinal türünü korur ve adını değiştirir (T&& ortaya çıkar), bu da onu daha sonra tam olarak bar işlevine geçirmenizi sağlar.

"(2^n - 1) aşırı yüklenmiş fonksiyonlar, burada n, fonksiyon argümanlarının sayısıdır" - MQL'de böyle bir rahatsızlıkla karşılaştım.
 
2016.10 . 15 09 : 48 : 01.820 MQL5    wrong type, loading of Test9 failed
Bu ne?
 
1455 - Geçmiş verilerde hata ayıklama (CTRL+F5) çalışmıyor. Test cihazı penceresi görünür, görselleştirme başlamıyor.
 
fxsaber :
1455 - Geçmiş verilerde hata ayıklama (CTRL+F5) çalışmıyor. Test cihazı penceresi görünür, görselleştirme başlamıyor.
Doğru değil. Ek olarak, hiçbir teknik ayrıntı, eylemlerinizin açıklaması yoktur. Bu, bulunduğu iddia edilen bir hata hakkında yazmadan önce ek bilgi hazırlamanız ve sağlamanız gereken özel bir konu başlığıdır.
 
fxsaber :

Çok dikkatli okudum. C++'ı anlamak MQL'den çok daha zordur. Yazıdan bir kaç şey anladım. Ve burada tartışılan şeyle nasıl bir ilişkisi olduğunu hiç anlamadım.

Yine de fırsatı sevdim

"(2^n - 1) aşırı yüklenmiş fonksiyonlar, burada n, fonksiyon argümanlarının sayısıdır" - MQL'de böyle bir rahatsızlıkla karşılaştım.

Bu, rvalue / lvalue / prvalue / xvalue / gvalue değerini anlamakla ilgilidir , yani. aslında birkaç sayfadır bahsettiğin şey buydu :) Anladığım kadarıyla, MQ C++ standartlarına ayak uydurmuş, onlara göre en değerli olanı oradan alarak, sadece rvalue/lvalue'da durmadan.

Oturmayı mantıklı olarak anlamama rağmen, bu kavramları henüz tam olarak anlamadım :)

Bu arada, MT5'teki bellek yöneticisi, program belleği sonuna kadar kullanırsa, anlaşılmaz bir şekilde çalışır. Küçük bedenlerle ölçmedim.

Örneğin, sanal makinemde 4 gig RAM, 2 çekirdek, MT5 v1455 x64 var.

Belleği nesnelerle tıkadım, görev yöneticisinde belleğin terminal başına 1,5 gigabayt ve sanal bellek başına 1,5 gigabayt ile tıka basa dolu olduğunu görebilirsiniz. Aynı zamanda MQL_MEMORY_USED , 400 MB kullanılmış belleği gösterir. Başlamadan önce terminale yaklaşık 140 mb, sanal makineye ise 150 mb civarındaydı.

Ayrıca, kullanılan bellek 400 mb'yi geçer geçmez, nesneler gerçekten silinmiş olsa da, bellek yöneticisinin belleği tamamen boşaltmama olasılığının olduğunu fark ettim. Ve hata ayıklayıcının buradaki davranışı tahmin edilemez - nesnelerin silinmesine ulaşırız, tamamen silinmelerini bekleriz, bundan sonra hata ayıklamayı durdururuz (hata ayıklayıcıdaki DUR düğmesine basarak), durur, MT5 yöneticisi yapmadı sisteme bellek vermek, yani. orada terminal başına 1,5 gigabayt ve sanal bellek başına 1,5 gigabayt asmak için kalır. Ancak ME, hata ayıklamanın tamamlandığını gösterse de, MT5'in kendisi hata ayıklamayı tamamlamadı. Belleği 400 MB'den küçük nesnelerle doldurursam, belleği boşaltmak dışında her şey yolunda gider.

Bellek, yalnızca terminal görevi çalışan görevler listesinden kaldırıldıktan sonra serbest bırakılır.

 
Karputov Vladimir :
Doğru değil. Ek olarak, hiçbir teknik ayrıntı, eylemlerinizin açıklaması yoktur. Bu, bulunduğu iddia edilen bir hata hakkında yazmadan önce ek bilgi hazırlamanız ve sağlamanız gereken özel bir konu başlığıdır.

Hizmet Masası geliştiricileri, yapılandırmamı birkaç kez zaten ezberledi.

Standart Uzman Danışmanlardan herhangi birini alıyorum ve meta düzenleyicide CTRL+F5 tuşlarına basıyorum. Test cihazının ana penceresi, meta düzenleyicide belirtilen ayarlarla açılır. Görselleştirme başlamıyor.

günlükte

2016.10 . 15 10 : 06 : 09      Tester  Leverage 1 : 100 set error
 
fxsaber :
Hizmet Masası geliştiricileri, yapılandırmamı birkaç kez zaten ezberledi.

Ne dediğimi anlamadın bile.

Tarihte hata ayıklamaya başlamadan önce ne yaptınız? MetaEditor'u ("Araçlar" - "Ayarlar" - "Hata Ayıklama" sekmesi) yapılandırdınız mı? Lütfen MetaEditora'dan bir ekran görüntüsü sağlayın ("Araçlar" - "Ayarlar" - "Hata Ayıklama"), Test Cihazında "Günlük" sekmesinde ne yazıyor? "Günlük" sekmesindeki Görselleştiricide ne yazıyor?

 
fxsaber :

Hizmet Masası geliştiricileri, yapılandırmamı birkaç kez zaten ezberledi.

Standart Uzman Danışmanlardan herhangi birini alıyorum ve meta düzenleyicide CTRL+F5 tuşlarına basıyorum. Test cihazının ana penceresi, meta düzenleyicide belirtilen ayarlarla açılır. Görselleştirme başlamıyor.

MACD Örneği normal şekilde çalışır. Ayarlarla ilgili bir sorun olabilir mi?