Hatalar, hatalar, sorular - sayfa 713

 
speedy :

Derleme düğmesi sonsuza kadar kayboldu (geri dönmek için düzenleyiciyi yeniden başlatmanız gerekir)

Eh, pek değil.. :) Dönmeyi başardım :)

Bunu yapmak için, özyinelemeli parçayı yorumlamanız ve hata ayıklama derleme düğmesine tıklamanız gerekir.

 
speedy :

1. İç temel olmayan sınıf öğelerini dışa "açığa çıkarmak" (ve bu örnekte, özniteliğin kendisini değil, yalnızca bir dizi öğesini !) Özellikle değerini değiştirme yeteneği ile güvenli değildir.

2. Ek olarak, bu, nesne yönelimli programlamanın "ruhu" ile çelişir: nesnenin verileriyle yapılan tüm çalışmalar, kendi yöntemlerini kullanarak nesnenin içinde yapılmalıdır..

3. Veri özelliği için sadece bir Setter kullanmaya ne dersiniz?

4. Kod yalnızca okunabilirlikten yararlanacaktır.

5. Sonuç olarak, l-değer indeksleyici ile bu "basitlik", siz dahil hiç kimsenin bu kodun nasıl çalıştığını anlamamasını sağlayacaktır..

6. Bir Setter yazmaktansa bug aramak için daha fazla zaman harcayın.

Nedir bu, kara mizah mı?

1. Üzgünüm, - saçmalık. Paranoyanın burada moda olduğunu ve "bunu neden yapmayalım" için bir levye argümanı olduğunu anlıyorum. Herhangi bir tehlike görmüyorum. Varsa dikkatlice baktım. Herhangi bir isim nihayetinde bir bağlantıdır. Dizin oluşturma, ad kavramının yaygın bir uzantısıdır. Daha fazla yok. Görevlendirmeyi tamamen yasaklayalım. Güvenlik için. Bağlantılar son derece tehlikeli değil mi?

2. Böyle bir mantıkla nesne yönelimli programlama ruhu, indeksleyicilerin hem sağda hem de solda mükemmel bir şekilde çalıştığı birkaç düzine daha az popüler dil olan C++, C#, Delphi ile şiddetle çelişmektedir. Ve nedense bu sağduyu ve ruhumla çelişmiyor.

Dizin oluşturucular dış ortamla iletişim kurmak için yapılmıştır. İşlevleri sadece bir arayüzdür. Her şeyi kapsülleyebilir ve gizleyebilirim, ancak nesneler üzerinde diziler olarak çalışmak için dizinlere ihtiyacım var. Aslında, tüm diziler bir şekilde düzenlenmiştir. Örneğin, sıradan dinamik diziler mql. Atama operatörünün solunda onları yasaklayabilir miyiz? Bunu SetArrayValue(array, i, j, value) türünde bir fonksiyonla değiştirelim; Aynı zamanda okunabilirlik konusunda da kazanacağız. Evet ve hata ayıklama çok daha kolay olacak. Falan. ah..

3. Normal bir indeksleyici yapmaya ne dersiniz? Hizmetçi kesinlikle havalı ama kraliçe daha da iyi.

4. İşte burası özellikle çatım gitmeye başladı. Okunmaz mı??

  t[i]=i*i;

Bu daha okunaklı, değil mi?

  t.setDataElement(i, i*i);

Güzel. Belki tedaviye giderim.

5. Sonunda havalı.

6. ağladım.


 

630 derlemesinde gösterge derlemeyi durdurdu:

 int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
{
 //код
 for ( int i=limit; i<rates_total && ! IsStopped (); i++)
  {
   if ()
    {
     //~400 стр. кода
     // i используется много раз
     // тут же определяется RT=true или false
    }
   if (RT)
    {
     double p=close[i];   // 'i' - undeclared identifier
    }
  }
 return (rates_total);   // 'rates_total' - undeclared identifier
}

c i için beyan daha önce yerleştirilirse hata kaldırılabilir .

 int i;
for (i=limit; i<rates_total && ! IsStopped (); i++)
{

}

Peki ya 'rates_total' - bildirilmemiş tanımlayıcı ?

Win7 x64 ve XP x32 için aynı.

 

Lütfen bana söyle. MathMin () ve MathMax (), işlevler (yığından geçen parametre ile) veya makro ikamesi ( satır içi ) olarak mı uygulanıyor? Referans kitabına bakılırsa, bunlar işlevlerdir .

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5
 
kPVT :

Gösterge, yapı 630'da derlemeyi durdurdu:

c hatası için bildirim daha önce yerleştirilirse kaldırılabilir

Peki ya 'rates_total' - bildirilmemiş tanımlayıcı ?

Win7 x64 ve XP x32 için aynı.

Belli ki kodunuzda bir yerde bir hata var. Değişken limitini, RT'yi bildirirseniz ve if () koşulunu ayarlarsanız, sunulan blok hatasız derlenir.
 
Rosh :
Belli ki kodunuzda bir yerde bir hata var. Değişken limitini, RT'yi bildirirseniz ve if () koşulunu ayarlarsanız, sunulan blok hatasız derlenir.

Doğal olarak, çünkü kodu ben vermedim, yaklaşık yapısını verdim.

619'da gösterge derlendi ve mükemmel çalıştı.

630'da belirtilen hataları veriyor.

%100 kod değişmedi. Derleyici açıkça değişti.

 
Lütfen Servis Masasına yazın ve kaynak kodunu ekleyin. Bu, geliştiricilerin nedeni bulmasına ve düzeltmesine yardımcı olacaktır.
 
speedy :

Böcek?

Aşağıdaki kod, derleyicide sonsuz bir döngü gibi bir şey oluşturur. İptal'e tıklayarak (derlemeyi iptal edin)

hemen çalışmaz, ancak çalıştığında editör üzerindeki kontrolü geri verir.

Aynı zamanda, İptal düğmesinin kendisi kaybolmaz, ancak kullanılabilir de kalmaz.

Derleme düğmesi sonsuza kadar kayboldu (geri dönmek için düzenleyiciyi yeniden başlatmanız gerekir)

Mesajınız için teşekkürler, derleyici hatası düzeltildi.
 
victorg :

Lütfen bana söyle. MathMin () ve MathMax (), işlevler (yığından geçen parametre ile) veya makro ikamesi ( satır içi ) olarak mı uygulanıyor? Referans kitabına bakılırsa, bunlar işlevlerdir .

İşlevler, elbette, çünkü derleme zamanında argümanların değerleri bilinmiyor. IMHO satır içi ve makro ikameleri farklı şeylerdir.

Not: Satır içi olup olmadıklarını söyleyemem.

 
220Volt :

İşlevler, elbette, çünkü derleme zamanında argümanların değerleri bilinmiyor. IMHO satır içi ve makro ikameleri farklı şeylerdir.

Not: Satır içi olup olmadıklarını söyleyemem.

Bir makro ve bir satır içi işlev gerçekten farklı şeylerdir. Ama bundan bahsetmiyorum. İşte derleme zamanında argümanların değerlerinin bilinmediği bir örnek

 #define  min(a,b) (((a)<(b))?(a):(b))
double func(a,b)
  {
  c=min(a,b);   // 1-й вариант
  c= fmin (a,b);   // 2-й вариант
   return (c);
  }

İlk durumda, kod mevcut fonksiyona (muhtemelen) eklenmelidir ve ikinci durumda, fonksiyon, yığından geçen parametrelerle (muhtemelen) çağrılmalıdır. Ancak optimize etmek için, derleyici ikinci seçeneği ikame yoluyla uygulayabilir. öyle mi? Bilmiyorum. Bu yüzden sordum.

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5
Neden: