Hatalar, hatalar, sorular - sayfa 1922

 

Derleme sırasında hata

 #define MACRO( x )      ((x) + 2 )
struct A {
        A( int , int ) {}
};
template < typename T>
struct B {
         static A a;
};
template < typename T>
A B::a( MACRO( 1 ), 2 ); //error: '(' - declaration without type
Ve < typename T> şablonu olmadan - sorun değil ... ama fark nedir?
 
A100 :

Derlerken hata

Ve < typename T> şablonu olmadan - sorun değil ... ama fark nedir?

Bu bir ekleme meselesi. makro parantez

 struct A {
        A( int ) {}
};

template < typename T>
struct B {
         static A a;
};
template < typename T>
A B::a( ( 0 ) );

Kaldırılırlarsa, derlenir.

 
fxsaber :

Bu bir ekleme meselesi. makro parantez

Kaldırılırlarsa, derlenir.

<typename T> şablonunu kaldırırsanız - o da derlenir (parantezlerle bile)
 
A100 :

.log dosyaları %AppData%\MetaQuotes\Terminal\...\MQL5\Logs\YYYYMMDD.log hemen güncellenmez

Güncelleme yalnızca şu durumlarda gerçekleşir: terminali yeniden başlattıktan sonra veya Görünüm menüsünü seçerken. Yeniden yüklemezseniz ve günün başından Görünüm'ü seçmezseniz, ilgili dosya boş olacaktır.

Önceden her şey çalışıyordu (ve hatta MetaEditor'da açılan YYYYMMDD.log dosyasının kendisi bile Uzmanlar sekmesinde satırlar görüntülendikten birkaç saniye sonra güncelleniyordu) ve gereksiz, açık olmayan işlemler yapmaya gerek yoktu.

IMHO, günlüklerin boyutu küçükse bu her zaman böyle olmuştur (burada forumda bir yerde önbellek sıfırlamanın başladığı boyut hakkında bilgi vardı). Flaşı diske başlatmak için her zaman bağlam menüsünü çağırmak zorunda kaldım.

 
Stanislav Korotky :

IMHO, günlüklerin boyutu küçükse bu her zaman böyle olmuştur (burada forumda bir yerde önbellek sıfırlamanın başladığı boyut hakkında bilgi vardı). Flaşı diske başlatmak için her zaman bağlam menüsünü çağırmak zorunda kaldım.

IMHO'nuzun anlamını tam olarak anlamıyorum. <= 1596 (32bit) yapıyı alın ve kontrol edin (bir satır bile olsa hemen .log dosyasına çıktılar [5-10 saniye]). bir dakika önce kontrol ettim

[ne önbelleği? her zaman ne? bir yerde bir şey hakkında bir şeyler vardı!?!]

Uzmanlar sekmesi ve MQL5\Logs\ Klasörü hakkında konuşuyorum

 
A100 :
<typename T> şablonunu kaldırırsanız - o da derlenir (parantezlerle bile)

Bu, "her şeyi kaldırırsanız derlenir" kategorisinden bir ifadedir.

Şablondaki hatanın nedenleri hakkındaydı. Bunun nedeni, ek bir durumda bir şablon yapısını ayrıştırırken derleyicinin yanlış davranışıdır. parantez. Şablonları uygulayan kişi, sorunun nerede olduğunu ve bunun neden ortaya çıktığını hemen anlar.

 

Merhaba arkadaşlar, görev iki iMACD_1 renk göstergesini , bir sinyal hattını ve iMACD_2'yi ayrı bir pencerede görüntülemektir, işte kodun bir kısmı:

İndeksleme yapıldı

   SetIndexBuffer ( 0 ,MACDBuffer_1, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,buffer_color_histogram, INDICATOR_COLOR_INDEX );
   SetIndexBuffer ( 2 ,Signal_Line, INDICATOR_DATA );
   SetIndexBuffer ( 3 ,MACDBuffer_2, INDICATOR_DATA );

Göstergeler için işaretçiler var

 handle_1= iMACD (name,period,fast_ema_period,slow_ema_period,signal_period,applied_price); 
 handle_2= iMACD (name_,period_,fast_ema_period_,slow_ema_period_,signal_period_,applied_price_);

Ve sonra mucizeler)))

Teoriye göre, göstergeleri görüntülemek için öyle olmalı

       if ( CopyBuffer (handle_1, 0 , 0 ,values_to_copy,MACDBuffer_1)< 0 ) return ( 0 );
       if ( CopyBuffer (handle_1, 1 , 0 ,values_to_copy,Signal_Line)< 0 ) return ( 0 );
       if ( CopyBuffer (handle_2, 3 , 0 ,values_to_copy,MACDBuffer_2)< 0 ) return ( 0 );

Çalışmıyor!!!

Ama böyle

      if ( CopyBuffer (handle_1, 0 , 0 ,values_to_copy,MACDBuffer_1)< 0 ) return ( 0 );
       if ( CopyBuffer (handle_1, 1 , 0 ,values_to_copy,Signal_Line)< 0 ) return ( 0 );
       if ( CopyBuffer (handle_2, 0 , 0 ,values_to_copy,MACDBuffer_2)< 0 ) return ( 0 );

çalışır, gösterge arabelleklerinin sayısıyla ilgili sorunların ne olduğunu anlayamıyorum. Şimdiden teşekkürler !!!

 

Derlerken hata

 template < typename T>
struct A {
         static int a1;
         static int a2;
};
template < typename T>
int A::a1;
template < typename T>
int A::a2;
struct B : A< int > {
         void f1() { Print ( A< int >::a1 ); } //unresolved static variable 'A<int>::a1'
         void f2() { Print (         a2 ); } //unresolved static variable 'B::a2'
};

Ve < typename T> şablonu olmadan - sorun değil

 
vitrix :

Selam arkadaşlar, görev iki iMACD_1 renk göstergesini , bir sinyal hattını ve iMACD_2'yi ayrı bir pencerede görüntülemek, işte kodun bir kısmı:

İndeksleme yapıldı

Göstergeler için işaretçiler var

Ve sonra mucizeler)))

Teoriye göre, göstergeleri görüntülemek için öyle olmalı

Çalışmıyor!!!

Ama böyle

çalışır, gösterge arabelleklerinin sayısıyla ilgili sorunların ne olduğunu anlayamıyorum. Şimdiden teşekkürler !!!


Lütfen bir dahaki sefere kodu mesaja nasıl ekleyeceğinizi unutmayın (Mesajınızı düzelttim).

İkincisi, iMACD göstergesinin yalnızca iki arabelleği vardır: "0" - MAIN_LINE, "1" - SIGNAL_LINE. Yani, gösterge değerlerini almak şöyle görünecektir:

   CopyBuffer (handle_iMACD,MAIN_LINE или SIGNAL_LINE,index - номер буфера с которого начинаем копирование, values_to_copy ,buffer)
 
A100 :

Derleme sırasında hata

Ve < typename T> şablonu olmadan - sorun değil

 template < typename T>
struct A {
         static int a1;
         static int a2;
};
template < typename T>
int A::a1 = 0 ;
template < typename T>
int A::a2 = 0 ;
struct B : A< int > {
         void f1() { Print ( A< int >::a1 ); } //unresolved static variable 'A<int>::a1'
         void f2() { Print (         a2 ); } //unresolved static variable 'B::a2'
};