Errori, bug, domande - pagina 1922

 

Errore di compilazione.

#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
E senzatemplate<typename T> va bene... qual è la differenza?
 
A100:

Errore di compilazione

E senzatemplate<typename T> - ok... qual è la differenza?

Sono le parentesi extra nella macro.

struct A {
        A(int) {}
};

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

Se li rimuovete, verrà compilato.

 
fxsaber:

Sono le parentesi extra nella macro.

Se li rimuovete, verrà compilato.

Se rimuovete il template<typename T>, compilerà anche (anche con le parentesi)
 
A100:

I file .log %AppData%\MetaQuotes\Terminal\...\MQL5\Logs\YYYYMMDD.log non sono aggiornati prontamente

L'aggiornamento avviene solo: dopo aver riavviato il terminale o dopo aver selezionato il menu View. Se non si riavvia o si clicca su Anteprima, il file corrispondente sarà vuoto.

Funzionava bene (anche il file YYYYMMDD.log aperto in MetaEditor veniva automaticamente aggiornato in pochi secondi dopo la visualizzazione delle righe nella scheda Experts) e non era necessario eseguire azioni extra non ovvie

IMHO, è sempre stato così se la dimensione del log è piccola (c'erano informazioni da qualche parte sul forum sulla dimensione, alla quale inizia il dump della cache). Ho sempre dovuto invocare il menu contestuale per inizializzare il lavaggio su disco.

 
Stanislav Korotky:

IMHO, questo è sempre stato il caso se la dimensione del registro è piccola (c'erano informazioni da qualche parte sul forum sulla dimensione alla quale inizia il reset della cache). Ho sempre dovuto chiamare il menu contestuale per inizializzare il lavaggio su disco.

Non capisco bene il senso del tuo IMHO. Prendete la build <= 1596 (32bit) e controllate (output su file .log immediatamente [5-10 secondi] anche una sola riga). Ho controllato un minuto fa.

[quale cache? quale sempre? c'era qualcosa su qualcosa da qualche parte!?!]

si tratta della scheda Experts e della cartella MQL5\Logs

 
A100:
Se si rimuove il template<typename T> si compila anche (anche con le parentesi)

Beh, è una frase della categoria "se rimuovi tutto, si compila".

Stavo parlando delle cause dell'errore esattamente con il template. La ragione è il comportamento errato del compilatore quando analizza un costrutto template nella situazione con parentesi aggiuntive. Chiunque abbia implementato i modelli può vedere immediatamente dov'è il problema e perché si verifica.

 

Ciao ragazzi, ho un compito di visualizzare due indicatori iMACD_1 colore, linea di segnale e iMACD_2 in una finestra separata, ecco una parte del codice:

Ho fatto l'indicizzazione

   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);

Hai delle indicazioni per gli indicatori

 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_);

(E poi si chiede))

Teoricamente dovrebbe funzionare per visualizzare gli indicatori

      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);

Non funziona!

Ma funziona così

      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);

Funziona, non riesco a capire qual è il problema con i numeri dei buffer degli indicatori. Grazie in anticipo!!!

 

Errore di compilazione.

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'
};

E senzatemplate<typename T> - bene

 
vitrix:

Ciao ragazzi, ho un compito di visualizzare due indicatori iMACD_1 colore, linea di segnale e iMACD_2 in una finestra separata, ecco una parte del codice:

Ho fatto l'indicizzazione

Hai delle indicazioni per gli indicatori

(E poi si chiede))

Teoricamente dovrebbe funzionare per visualizzare gli indicatori

Non funziona!

Ma funziona così

Funziona, non riesco a capire qual è il problema con i numeri dei buffer degli indicatori. Grazie in anticipo!!!


Per favore, la prossima volta ricordati comeinserire il codice nel post(il tuo post l'ho corretto).

Secondo: l'indicatore iMACD ha solo due buffer: "0" - MAIN_LINE, "1" - SIGNAL_LINE. Quindi, per ottenere i valori dell'indicatore sarà così:

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

Errore di compilazione.

E senzatemplate<typename T> - bene

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'
};