Hatalar, hatalar, sorular - sayfa 1416

 
Hangi durumlarda "Dahili derleyici hatası" oluşur?   
İlyas :
Şimdiye kadar bilinen iki vaka:
1) bool &= (bool ifadesi) işleminde
2) Dizileri başlatmada fazladan virgül: val={ {...},{...} , }

Yeni yapıda, bu hatalar düzeltilmedi, ya da ne? Hala derleyiciden bir hata alıyorum. 1159 yapısında kalmalısın.

 
Renat Fatkhullin :
Şablonlar için, gövdeleri dışarı taşımadan tüm yöntemleri sınıf tanımının içine yerleştirme gereksinimi.

Ana şey, bu gereksinimin daha fazla kalacağı açıktır, aksi takdirde sadece yığın kapları ve kuyruklar oluşturdum ve bir ay sonra sınıf şablonları ortaya çıktı ve onlarla her şey daha iyi olmalı :)

Sınıf şablonları hakkında başka bir soru. İki şablon sınıfı var, sınıflardan biri diğerini kullanıyor, bir şablon sınıftan diğerine tür aktarımı olacak mı, olmayacak mı?

 
coderex :

Ana şey, bu gereksinimin daha fazla kalacağı açıktır, aksi takdirde sadece yığın kapları ve kuyruklar oluşturdum ve bir ay sonra sınıf şablonları ortaya çıktı ve onlarla her şey daha iyi olmalı :)

Sınıf şablonları hakkında başka bir soru. İki şablon sınıfı var, sınıflardan biri diğerini kullanıyor, bir şablon sınıftan diğerine tür aktarımı olacak mı, olmayacak mı?

Dene.
 
Renat Fatkhullin :
Dene.
Birkaç hata almaya çalışıyorum, bunu yapmanın başka bir yolunu düşünüyorum ...
 

Ilyas:
На сегодня известно о двух случаях:
1) в операции bool &= (bool expression)
2) Лишняя запятая в инициализирующих последовательностях: val={ {...},{...}, }

Alexey Navoykov:
Yeni yapıda, bu hatalar düzeltilmedi, ya da ne? Hala derleyiciden bir hata alıyorum. 1159 yapısında kalmalısın.

MT4 890'daki 2. paragrafta fazladan bir virgül olup olmadığını kontrol ettim - sadece bir hata mesajı veriyor.
 

CList'i sıralayan var mı?

Esasen, Karşılaştırma'yı geçersiz kılmanız gerekir.

Ancak her zaman temel sınıfın karşılaştırması denir. Ama işe yaramıyor, burada bir şeylerin yanlış olduğu düşüncesi sürünüyor ...

Basit bir örnek yaptı:

 class COperation : public CObject
  {
public :
   double            number;
   COperation( double p) { number = p;}

virtual int Compare( const CObject *node, const int mode= 0 );
  };
  
 int COperation::Compare( const CObject *node, const int mode= 0 )
  {
   const COperation *ppp = node;
   
   if ( this .number > ppp.number)
     {
       return 1 ;
     }
   if ( this .number < ppp.number)
     {
       return - 1 ;
     }
   
   return 0 ;
 }   


void OnStart ()
  {
   CList *list = new CList();
   list.Add( new COperation( 3 ));
   list.Add( new COperation( 4 ));
   list.Add( new COperation( 7 ));
   list.Add( new COperation( 2 ));
   list.Add( new COperation( 3 ));
   list.Add( new COperation( 9 ));
   list.Add( new COperation( 0 ));
   list.Add( new COperation( 1 ));
   
   Print ( "After Sort" );
   COperation *node = list.GetFirstNode();
   string numbers = "" ;
   for (;node != NULL ; node = node.Next())
     {
      numbers += ( string )node.number + " " ;
     }
     Print (numbers); 
    numbers = "" ;
     
   list.Sort( 0 );
   
   Print ( "Before Sort" );
   node = list.GetFirstNode();
   for (;node != NULL ; node = node.Next())
     {
      numbers += ( string )node.number + " " ;
     }
   Print (numbers); 
   
   
   delete list;
  }
Dosyalar:
sort.mq5  3 kb
 

İç içe şablonları (MQL4) işlerken, türü geçerken aksaklıklar görüyorum - bunu fark eden var mı?

Özellikle, bir şablon yöntemine sahip bir A sınıfı vardır; bunun içinde, yöntemi başlatan aynı T türünde bir şablon oluşturucu tarafından başka bir B sınıfına ait bir nesne oluşturulur. Sonuç olarak, bu yöntemin içinde typename, geçirilen türü, örneğin int olarak doğru bir şekilde tanımlar ve zaten B yapıcısının içinde, typename eşittir dizedir.

SD?

 
Bir sayfayı sıralamanın en ortodoks yolu, onu bir diziye geçmek, diziyi sıralamak ve onu geri almaktır.
 

Sürekli sıralama kullanıyorum - sorun çıkmıyor.

Siz, sigma7i , anladığım kadarıyla, Coperation::Compare() yöntemi yanlış bir şekilde geçersiz kılınmış, temel CObject::Compare() yönteminin döndürdüğü yanlış türde değer döndürüyor ve derleyici bunu ayrı olarak kabul ediyor, değil sanal. Sonuç olarak objelerinizde sadece base method çağrılır, derleyiciye göre varis yoktur...

 
sigma7i :

Ancak her zaman temel sınıfın karşılaştırması denir. Ama işe yaramıyor, burada bir şeylerin yanlış olduğu düşüncesi sürünüyor ...

 virtual int Compare( const CObject *node, const int mode= 0 ) const ;