Hatalar, hatalar, sorular - sayfa 1981

 
A100 :

Aslında bu hiçbir şeyi değiştirmiyor - bir derleme hatası (bir tabletim var - Borland derleyicisi)

Hmm, yani dil standartlarına girmeli ve kimin derleyicisinin berbat olduğunu görmelisiniz.
 
Alexey Navoykov :
Hmm, yani dil standartlarına girmeli ve kimin derleyicisinin berbat olduğunu görmelisiniz.
İkinci seçenek benzer

#ifdef __BORLANDC__
class B;
class A {
         int g( B * );
         int i;
};
class B : public A {};
int A::g( B *b ) { return b->i; } //Error: E224
#endif

B*'dan A*'ya örtük dönüştürme yoluyla özelin üstesinden geldiği için VS 2010'u biçer


#ifdef __BORLANDC__

class B;
class A {
         int g( B * );
         int i;
};
class B : public A {};
int A::g( B *b ) { return ((A *)b)->i; } //нормально

#endif

 
Alexey Navoykov :
Hmm, yani dil standartlarına girmeli ve kimin derleyicisinin berbat olduğunu görmelisiniz.
gcc 7.2, burada kontrol edilen en son sürümü derler
Compiler Explorer - C++
  • About the author
  • godbolt.org
These settings control how Compiler Explorer acts for you. They are not preserved as part of shared URLs, and are persisted locally using browser local storage.
 
Комбинатор :
gcc 7.2, burada kontrol edilen en son sürümü derler

Sonuç aşağıdaki tablodur

 class B;
class A {                                       //MQL //BCC //VS2010 //gcc
         int f1( B *b ) { return        b .i;   } // -     -     +        +
         int f2( B *b ) { return        b .g(); } // +     -     +        +
         int f3( B *b ) { return ((A *)b).i;   } // +     +     +        +
         int f4( B *b ) { return ((A *)b).g(); } // +     +     +        +
         int f5()       { return        b .i;   } // -     -     +        +
         int f6()       { return        b .g(); } // +     -     +        +
         int f7()       { return ((A *)b).i;   } // +     +     +        +
         int f8()       { return ((A *)b).g(); } // +     +     +        +
//---
         int g() { return 0 ; }
         int i;
        B *b;
};
class B : public A {};

Ve msdn yazarken: Erişim denetimi, nesnelerin yasa dışı amaçlarla kullanılmasını önlemeye yardımcı olur. Bu tür koruma, açık tür dönüştürmeleri ( tür dökümü ) gerçekleştirildiğinde kaybolur.
 

Merhaba.

Strateji test cihazında görselleştirme etkinleştirildiğinde görüntülenen grafikten gösterge penceresini nasıl kaldıracağımı söyleyebilir misiniz?

MT5'te sihirbaz kullanılarak oluşturuldu.

MQL5 belgelerinde IndicatoRelease'in test cihazında çalışmadığını okudum. (Yine de bu işlevi OnDeinit'e eklemeye çalıştım, tanıtıcı bildirilmediğine yemin etmeye başladı. İlan ediyorum, başka hatalar veriyor.)

Başka bir seçenek var mı?

 
Ahmet Garyagdyyev :

Merhaba.

Strateji test cihazında görselleştirme etkinleştirildiğinde görüntülenen grafikten gösterge penceresini nasıl kaldıracağımı söyleyebilir misiniz?

MT5'te sihirbaz kullanılarak oluşturuldu.

MQL5 belgelerinde IndicatoRelease'in test cihazında çalışmadığını okudum. (Yine de bu işlevi OnDeinit'e eklemeye çalıştım, tanıtıcı bildirilmediğine yemin etmeye başladı. İlan ediyorum, başka hatalar veriyor.)

Başka bir seçenek var mı?


Tüm göstergeleri içeren şablonu daha önce kaydettiğiniz herhangi biriyle değiştirebilirsiniz.

 
A100 :

Sonuç aşağıdaki tablodur

VS ve gcc, Borland'dan uzun süredir referans* (veya en azından büyük ölçüde hatalara daha az eğilimli) olarak kabul ediliyor. Borland'ı uzun yıllardır kullanıyorum, ancak diğer avantajlarına dayanarak.

not. * - bu benim kişisel görüşüm değil; bunu tartışmayacağım.

 

Meslektaşlarım, bir STL c++ kitaplığı uygulama girişimleriyle karşılaşan var mı (dil özelliklerini ayarlayarak)? Kod tabanı yerleşimi tercih edildi, arama hayır diyor, ama belki ... . Tabii ki, hepsi değil, bazı temel şeyler: şablonlar aracılığıyla birkaç normal kapsayıcı ve aynı auto_ptr (elbette kendim yazdım, ancak bu tür ilkelleri kendi kendine yazmak aptallıktır).
Standart olmayan std µl için ne ve neden STL'deki analogların metotları/sınıfları için yeni isimler icat etmenin gerekli olduğunu anlamayacağım.

 

Bir hata buldum, derlenmiş metni tamamen eklemeyeceğim, onu komut dosyasından parçalar halinde çıkaracağım:

 class Source : public CObject
{
public :
   upindex_t start, top, lstart, ltop;
};

CArrayObj sourcear;

do
{
   Source *new_src = new Source;
   new_src.start = last.start;
   new_src.top = last.top;
   new_src.lstart = prev_prev.start;
   new_src.ltop = prev_prev.top;
   if ( ! sourcear.Add(new_src) )
       return ;
}
while (...);

for ( int i = 0 ;  i < sourcear.Total();  ++ i)
{
   Source cursrc = (Source*)sourcear.At(i);   //!!!!! Это не вызывает ошибки во время компиляции
}

Onlar. cast: CObject* --> Source* --> Source

Yoksa biraz zor MQL Spesifik mi?


Not: ve bu satırı yiyor:

Source new_src = new Source;

Biraz saçmalık. Dilde kopyalama eksileri / operatörleri yok, referans vermedim. Burada neler oluyor?

 
pavlick_ :

Yoksa biraz zor MQL Spesifik mi?

 class A {};

void OnStart ()
{
  A a = new A;
}

Varsayılan kopyalama operatörü tetiklenir.