Hatalar, hatalar, sorular - sayfa 1965

 
fxsaber :

Aynen öyle! Artık f her türlü fonksiyonu ve bir değişkeni aynı anda çağırabilirim. Rastgele hatalara neden olmamak için bu tür belirsizliklerde sağduyu olmalıdır . Bence, yanlışlıkla başka bir f alıp tanımladığınızda sorun yaratmaktansa, typename f'de boş bir dize vererek kopmak mantıklı.

Sağduyu için her yerde, özellikle böcekler arasında çok fazla aramamalısınız. Aksi takdirde, sizi dinleyin, bu nedenle herhangi bir MQL hatası kesinlikle bir hata değil, akıllı geliştiricilerin özel olarak sağladığı bir özelliktir))

Daha önce belirtildiği gibi, herhangi bir şüphe varsa, yapılacak ilk şey onu C ++ ile kontrol etmek ve bundan daha fazla dans etmektir.

Belirsizliklere gelince, bunlar bir derleyici hatasına neden olmalı ve sorun olmamalıdır. Ve A100 örneğinde her şey açık ve netti, yani ne demek istediğiniz çok açık değil. Bir işlevi aşırı yüklemeye ihtiyaç varsa, onu aşırı yüklersiniz, belirsizlik olan yerlerde derleme hatalarını düzeltirsiniz, o kadar.

 

MQL'de bir şablon sınıfının statik üyesi nasıl başlatılır?

 template < typename T>
class xxx
{
   static int value;
};

template < typename T>
int xxx<T>::value = - 1 ;
 
Stanislav Korotky :

MQL'de bir şablon sınıfının statik üyesi nasıl başlatılır?

Bu bir sorunsa, onu şablon olmayan bir temel sınıfa taşıyın ve devralın. Ve genel olarak xs nasıl.
 
Stanislav Korotky :

MQL'de bir şablon sınıfının statik üyesi nasıl başlatılır?

 template < typename T>
int xxx::value = - 1 ;
 

A100 :

 template < typename T>
int xxx::value = - 1 ;

Genel olarak tabi ki bu yöntem C++'a tekabül etmez ancak MQL'de çalışır.

Bir yöntemi sınıfın dışına taşırken de benzer bir problem yaşadım:

 template < typename T>
class A
{
 public :
   void f();
};

template < typename T>
void A<T>::f() { }   // 'A' - identifier already used

Ama sizin sayenizde artık çözüm de bulundu:

 template < typename T>
void A::f() { }
bu da yanlış olsa da, elbette, çünkü bir şablon sınıf yöntemi değil, bir şablon yöntemi tanımlamak anlamına gelir. Ve her ikisi de sınıfta mevcutsa, o zaman belirsizlik olacaktır.
 
Alexey Navoykov :

Bir yöntemi sınıfın dışına taşırken de benzer bir problem yaşadım:

Çok daha uygun. Tek kısıtlama, başka bir sınıfın arasına sıkıştırılamamasıdır (örnekte olduğu gibi)

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

A100 , 2016.05.19 23:26

Derleme Hatası

 template < typename T>
class A { public :
         bool operator ==( const A& ); //error: 'operator' - function must have a body
        T t;
};
class B {
        A< int > a;
};
template < typename T>
bool A:: operator ==( const A& )  { return false ; }
void OnStart ()
{
        A< int > a, b;
         Print ( a == b );
}
Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2016.05.19
  • www.mql5.com
Форум алго-трейдеров MQL5
 
Alexey Navoykov :

çünkü bir şablon sınıf yöntemi değil, bir şablon yöntemi tanımlamak anlamına gelir. Ve her ikisi de sınıfta mevcutsa, o zaman belirsizlik olacaktır.

Ortaya çıkmayacak - her şey bizden önce düşünüldü (ler). Şablon satırını iki kez tekrarlamanız gerekir (en üstteki sınıfa, alttaki yönteme atıfta bulunur)
 
A100 :
Ortaya çıkmayacak - her şey bizden önce düşünüldü (ler). Şablon satırını iki kez tekrarlamanız gerekir (üstteki sınıfa, alttaki yönteme atıfta bulunur)

Kahretsin, bu ne kadar kafa karıştırıcı göründüğü bir pipet.

A100 :
Çok daha uygun.

Eh, evet <T> koyma gereğinin olmaması çok ciddi bir kolaylık)

 
Alexey Navoykov :

Eh, evet <T> koyma gereğinin olmaması çok ciddi bir kolaylık)

Yöntemi sınıftan çıkarma yeteneğinin uygun olduğunu kastetmiştim.
 
Alexey Navoykov :

Bir yöntemi sınıfın dışına taşırken de benzer bir problem yaşadım:

tabiki yanlış çünkü bir şablon sınıf yöntemi değil, bir şablon yöntemi tanımlamak anlamına gelir. Ve her ikisi de sınıfta mevcutsa, o zaman belirsizlik olacaktır.

Yöntemlerin genellikle sınıftan çıkarıldığını fark ettim, ama neden? SB'ye baktı, bu nedenle "küçük" yöntemler bir satırda bir kerede "uzun" - dışarıda tanımlanır. Algılama kolaylığı yoktur, çünkü ALT+G, harici olarak tanımlandığında bir değil iki atlama konumu sunar. Ve aşırı yükler varsa, sırasıyla ikinin katıdır. Ve ALT + M'de, her şey hemen görünür.

Belki bu, arayüz görevinin görünürlüğüne bir tür övgüdür, ancak şu ana kadar ilham almadım.