Hatalar, hatalar, sorular - sayfa 1570

 

Şablonların iyileştirilmesi gerekiyor (uygulama A sınıfı {} ötesine taşındı)

 template < typename T>
class A { public :
template < typename T2>
         void f1( T2 t2 );
template < typename T2>
         void f2( T2 t2, T tt ) { Print ( __FUNCSIG__ , " " , typename ( this .t ) ); }
template < typename T2>
         void f3( T2 t2, T tt );
        T t;
};
template < typename T>
template < typename T2>
void A::f1( T2 t2 )       { Print ( __FUNCSIG__ , " " , typename ( this .t ) ); } //нормально
template < typename T>
template < typename T2>
void A::f3( T2 t2, T tt ) { Print ( __FUNCSIG__ , " " , typename ( this .t ) ); } // error: 'T' - declaration without type

A::f3, A sınıfı {} dışında uygulanamıyor.

Diyeceksiniz ki - ama o A sınıfı {} içinde - yapabilirsiniz. Evet, yapabilirsiniz... f2() gibi, ancak zorluk, amacın hantal işlevleri A sınıfı {} dışına taşımak olmasıdır. Ana şey, A::f1() A sınıfı {} için alınabilir ve her şey çalışır, ancak A::f3() yapamaz - derleyici bir hata üretir, ancak A'dan A::f1() ::f3( ) temelde farklıdır.

 
Hayır, bu bir çeşit kalay, bu arada teoride typedef sorunu çözecek
 
A100 :

Şablonların iyileştirilmesi gerekiyor (uygulama A sınıfı {} ötesine taşındı)

A::f3, A sınıfı {} dışında uygulanamıyor.

Diyeceksiniz ki - ama o A sınıfı {} içinde - yapabilirsiniz. Evet, yapabilirsiniz... f2() gibi, ancak zorluk, amacın hantal işlevleri A sınıfı {} dışına taşımak olmasıdır. Ana şey, A::f1() A sınıfı {} için alınabilir ve her şey çalışır, ancak A::f3() yapamaz - derleyici bir hata üretir, ancak A'dan A::f1() ::f3( ) temelde farklıdır.

Kurallar bu şekilde derlenir.

 template < typename T>
class A { public :
template < typename T2>
         void f1( T2 t2 );
template < typename T2, typename T>
         void f2( T2 t2, T tt ) { Print ( __FUNCSIG__ , " " , typename ( this .t ) ); }
template < typename T2, typename T>
         void f3( T2 t2, T tt );
        T t;
};
template < typename T2>
void A::f1( T2 t2 )       { Print ( __FUNCSIG__ , " " , typename ( this .t ) ); } //?????????
template < typename T2, typename T>
void A::f3( T2 t2, T tt ) { Print ( __FUNCSIG__ , " " , typename ( this .t ) ); } //error: 'T' - declaration without type

Ve f1 ve f3 senin için biraz farklıydı

 
Andrey Barinov :

Kurallar bu şekilde derlenir.

Norm değil - sadece derleyici OnStart olmadığına karar verdi - sorun değil

Ekle

 void OnStart ()
{
        A< long > a;
}
 

Derleyici hatası : dahili hata #9

Dosyalar:
Test114.mq5  3 kb
 

Birkaç satırı değiştirirseniz, hata şu şekilde değişir: ağaç optimizasyon hatası

Ve başlangıçta (basitleştirmeden önce) hata şuydu: kod oluşturma hatası

Ve her şey burada bitiyor - ve ondan önce her şey yolunda gitti.

Dosyalar:
Test115.mq5  3 kb
 
A100 :

Tek bir arşivde birçok farklı ince kaynak oluşturun. Böylece geliştiriciler, bir sonraki buggy yapısını piyasaya sürmeden önce kullanabilirler.

Arşive "bit kontrolü" adını verin. Elbette, farklı derleyici türleri için bu tür test seçenekleri vardır.

 
Derleme hatası: kod oluşturma hatası
Dosyalar:
Test116.mq5  2 kb
 


Kriter değerinin yanlış hesaplanması nedeniyle optimizasyon grafiğinin çizilmesi durdurulur. Lütfen düzeltin, çünkü Grafikte optimizasyonun ilerlemesini görsel olarak gözlemlemek çok uygundur.

Yalnızca Balance + max RF kriterlerinde görünür. // En azından (şimdiye kadar küçük) uygulamamda.

// Yalnızca grafik kırılır, optimizasyon başarılı bir şekilde devam eder.

-----------UPD

Проявляется только на критерии Balance + max RF.

Yanlıştı.


 

& ve GetPointer'ın farklı davranışı

 class A {};
class B {
        A *f() const { return GetPointer ( a ); } //не генерирует ошибки
        A *g() const { return &a; }              //ошибка: 'return' - cannot convert from const pointer to nonconst pointer
        A a;
};