Hatalar, hatalar, sorular - sayfa 710

 

Dizi değişkeninin boyutunu belirlemek gerekliydi, ancak bir hata oluşuyor:

 void OnStart ()
  {
   int j= 1000 ;
//---
   double arrBalancesTS[][j];
  }

//---

//---

Doğrudan sabitlerle (#define) ve sayısal bir değerle çalışır, ancak çalışmaz. Niye ya?

 
tol64 :

Değişken dizisinin boyutunu belirlemek gerekliydi, ancak bir hata oluşuyor:

//---

//---

Doğrudan sabitlerle (#define) ve sayısal bir değerle çalışır, ancak çalışmaz. Niye ya?

sabitlerle - statik dizi ve değişkenle - dinamik. Ve dinamik boyut ArrayResize kullanılarak belirlenir
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 

tol64 :

Niye ya?

İkinci ve sonraki boyutların sabit bir boyutu vardır. Sadece sabit olarak ayarlanabilir.
 
tol64 :

Doğrudan sabitlerle (#define) ve sayısal bir değerle çalışır, ancak çalışmaz. Niye ya?

Çünkü #define ile tanımlarken, derleyici, derlemeden önce karşılaştığı makroyu gerekli girişle değiştirir. Bu nedenle görür

 void OnStart ()
  {
//---
   double arrBalancesTS[][ 1000 ];
  }

hangi MQL5 diliyle çelişmez.

 
Yedelkin :

TAMAM. Sonra dalma yapacağım. Bu nedenle, Print() işlevinin açıklamasında " Çift tip veri, noktadan sonra 16 ondalık basamak doğruluğuyla çıktı alınır" yazıyor. Aslında, Print() işlevinin biraz yuvarlatılmış veriler verdiği ortaya çıktı:

ND 0 victorg2 (EURUSD,M1) 11:04:42 Yazdır(b)= 200.0
MP 0 victorg2 (EURUSD,M1) 11:04:42 Print(DoubleToString(b,16))= 199,9999999999999716

Gerçek şu ki, gerçek bir sayı , 17'den fazla anlamlı basamak olmadan bellekte saklanır.

Farkı hissetmek için bu örneği deneyin:

 //+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   double a,b;

   a= 7.0 / 200.0 ;
   b= 7.0 /a;
   Print ( "Print(b)=" ,b);
   Print ( "Print(DoubleToString(b,16))=" , DoubleToString (b, 16 ));

   Print ( "Print(StringFormat(b,%.15G))=" , StringFormat ( "%.15G" ,b));
   Print ( "Print(StringFormat(b,%.16G))=" , StringFormat ( "%.16G" ,b));
   Print ( "Print(StringFormat(b,%.17G))=" , StringFormat ( "%.17G" ,b));
   Print ( "Print(StringFormat(b,%.18G))=" , StringFormat ( "%.18G" ,b));
   
//19999999999999997
   Print ( "Print(StringFormat(b,%.15f))=" , StringFormat ( "%.15f" ,b));
   Print ( "Print(StringFormat(b,%.16f))=" , StringFormat ( "%.16f" ,b));
   Print ( "Print(StringFormat(b,%.17f))=" , StringFormat ( "%.17f" ,b));
   
  }
//+------------------------------------------------------------------+
Kılavuzdaki açıklama düzeltilecektir.
 
notused :
sabitlerle - statik dizi ve değişkenle - dinamik. Ve dinamik boyut ArrayResize kullanılarak belirlenir
TheXpert :
İkinci ve sonraki boyutların sabit bir boyutu vardır. Sadece sabit olarak ayarlanabilir.
Roş :

Çünkü #define ile tanımlarken, derleyici, karşılaşılan makroyu derlemeden önce gerekli girişle değiştirir. Bu nedenle görür

hangi MQL5 diliyle çelişmez.

Teşekkür ederim. Söyleyin bana, dizinin hem birinci hem de ikinci boyuttaki boyutu hesaplamalar sırasında belirlenirse ve sabit olamazsa ne yapılabilir? ArrayResize () ile yalnızca ilk boyutu yeniden boyutlandırabilirsiniz. Ve neden bir değişkenin değerini kullanarak bir dizinin boyutunu değiştirebiliyorsunuz, ancak bunu başlangıçta ayarlayamıyorsunuz?
 
tol64 :
Teşekkür ederim. Söyleyin bana, dizinin hem birinci hem de ikinci boyuttaki boyutu hesaplamalar sırasında belirlenirse ve sabit olamazsa ne yapılabilir? ArrayResize () ile yalnızca ilk boyutu yeniden boyutlandırabilirsiniz. Ve neden bir değişkenin değerini kullanarak bir dizinin boyutunu değiştirebiliyorsunuz, ancak bunu başlangıçta ayarlayamıyorsunuz?
sınıfları kullanın.
 
tol64 :
Teşekkür ederim. Söyleyin bana, dizinin hem birinci hem de ikinci boyuttaki boyutu hesaplamalar sırasında belirlenirse ve sabit olamazsa ne yapılabilir? ArrayResize () ile yalnızca ilk boyutu yeniden boyutlandırabilirsiniz. Ve neden bir değişkenin değerini kullanarak bir dizinin boyutunu değiştirebiliyorsunuz, ancak bunu başlangıçta ayarlayamıyorsunuz?
CMatrix sınıfı için bir örnek için Aşırı Yükleme İşlemleri bölümüne bakın, belki bu size uyacaktır.
 
Merhaba.

2 sınıfı mesaj alışverişi yapmaya nasıl zorlayacağımı bulamadığım bir şey.

A sınıfında B'ye ve B'de A'ya bir bağlantı olmasını istedim.
Bir derleme hatası var, belki de buna MQL5'te izin verilmiyor. Ancak bu olmadan, nesne programlama %30 oranında kullanılır.

Çözüm muhtemelen her şeyi bilen ve her şeyi yapabilen büyük bir GOD Sınıfı yazmak olacaktır. Ama bu bana pek zarif gelmiyor.
Çözüm konusunda kim yardımcı olabilir?

Şimdiden teşekkürler!