Hatalar, hatalar, sorular - sayfa 1768

 
fxsaber :
Bu sadece aptal bir derleyicide mümkündür. Sen kendin her şeyi anlıyorsun.
C++ derleyicisi sizin için düşünmez.
#include <iostream>
using namespace std;
struct S
{
    S operator +( const S&) {cout << "operator +\n" ; return S{};}
};
S operator "" _s( const char *, size_t) {cout << "literal operator\n" ; return S{};}
int main()
{
    cout << "___literal concatenation example___\n" ;
    S s = "sd" _s "sf" _s;
    cout << "___operator+ example___\n" ;
    S s2 = "sd" _s + "sf" _s;
}
Egzoz:
___değişmez birleştirme örneği___
gerçek operatör
___operatör + örnek___
gerçek operatör
gerçek operatör

operatör +

Gördüğünüz gibi, ikinci durumda + operatörü yapıştırma ile değiştirilmedi (bir değişmez için oluşturuldu, ardından çalışma süresi eklenmesi). Derleyici basitçe kesemez çünkü programcının çok fazla olasılığı vardır, bu da optimizasyon olasılıklarını büyük ölçüde sınırlar. Bu bir ML değil, elbette, içinde her şey farklı olabilir, ancak "normal bir derleyici benim için her şeyi yapacak" ifadesinin kendisi hatalı.
 
pavlick_ :
Bu bir ML değil, elbette, içinde her şey farklı olabilir, ancak "normal bir derleyici benim için her şeyi yapacak" ifadesinin kendisi hatalı.
MQL'de böyle operatörler olmadığı için, bunlarla ilişkili fırsatlara sahip olmamak mantıklıdır. Derleyiciler hakkında tartışmayacağım, çünkü asla programcı değildir. Sadece MQL hakkında biraz bilgim var.
 

Zamanı ve parayı boşa harcamakta tereddüt ettim: optimize edici son geçişte donuyor. Temsilciler hiçbir şey yapmaz, her şey Yetkili aşamasındadır. Dergide sessizlik. Aracıları etkinleştirmek/devre dışı bırakmak anlamsızdır , optimizasyonu yeniden başlattıktan sonra her şey sıfırdan başlar.

Kim karşı karşıya geldi? Nasıl savaşılır?

Dosyalar:
opt1.png  44 kb
opt2.png  96 kb
opt3.png  88 kb
 

sihirli dize

1024x768 ekran çözünürlüğüne sahip MetaEditor\1495'teki eylemlerin sırası:

  • Ekli dosyayı aç
  • Yatay kaydırma kaydırıcısını tamamen sağa hareket ettirin (şekilde olduğu gibi)
  • 3. satırda fare ile / * 12345 * / parçasını seçin
Ek ayarlar: Araçlar\Ayarlar\Genel\Sekme 4 karakter
Dosyalar:
Test.mq5  2 kb
 

StringToInteger() işlevini kullanarak bir dizeyi sayıya dönüştürmeye çalışırken, dize bir sayı içermiyorsa, hatasız olarak 0 döndürülür (GetLastError() = 0). Giriş parametrelerinde bir dize sunulursa ve kullanıcı değerleri yanlış belirtirse, işlev yanlış bir değer döndürür ve hata oluşturmaz. Bu kötü.

Ayrıca, dize bir sayının yanlış bir temsilini içeriyorsa, örneğin 5o (50 yerine) - işlev yine hata vermeden 5 değerini döndürür. Ve burada, sadece 0 değil, aynı zamanda fonksiyon dizgiyi 5 olarak ayrıştırdı, ki bu yine doğru değil.

Sevgili geliştiriciler, lütfen hata kodları ekleyerek veya ayrıştırma imkansızsa, neyin yanlış olduğunu belirleyebilmeniz için LONG_MAX değeri + bir hata döndürerek işlevi iyileştirin. Şimdi bunu yapmak imkansız.

Komut dosyası kodunu kontrol edin:

#property version    "1.00"
#property script_show_inputs
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
input string value= "05" ;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   const long iValue= StringToInteger (value);
   Print ( "iValue = " ,iValue, ", lastError = " , GetLastError ());
  }
//+------------------------------------------------------------------+
 

İşlev sürümünüzü uygulayın - 10 dakikadan fazla sürmez.

Sistem işlevlerinin davranışını değiştirmeyeceğiz.

 
Renat Fatkhullin :

İşlev sürümünüzü uygulayın - 10 dakikadan fazla sürmez.

Sistem işlevlerinin davranışını değiştirmeyeceğiz.

Onlar. İşlevleri, özellikle de açıkça yalan söyleyebilen işlevleri iyileştirmenin gerekli olduğunu düşünmüyor musunuz?

Hata kodları ekleseler bile zaten iyi olurdu, yoksa tekerleği yeniden icat etmeyi önerirsiniz. Tabii ki zor değil, ama bir bisiklet.

 
Alexey Kozitsyn :

Onlar. İşlevleri, özellikle de açıkça yalan söyleyebilen işlevleri iyileştirmenin gerekli olduğunu düşünmüyor musunuz?

Hata kodları ekleseler bile zaten iyi olurdu, yoksa tekerleği yeniden icat etmeyi önerirsiniz. Tabii ki zor değil, ama bir bisiklet.

Değiştirmeye gerek yok, bunlar wtoi/atoi'nin tam analoglarıdır. Soru kapanmıştır.
 

Derlerken hata

#include <Math\Stat\Math.mqh>
struct S {};
 
merhaba, lütfen bana metatrader'da "dönem ayırıcı" ayarlamanın mümkün olup olmadığını söyleyebilir misiniz? Sadece m5'te mumların 15, 30 ve saatlerin nerede bittiğini görebileyim, her zaman saate bakmamak için bunu nasıl yapabilirim?
Neden: