Errori, bug, domande - pagina 1784

 
Rashid Umarov:
Guarda qui - Programma di esecuzione

Per un riassunto dei programmi in MQL5, vedere la tabella qui sotto:

Programma

Esecuzione

Nota

Script

Nel proprio thread, tanti script quanti sono i thread di esecuzione per essi

Uno script in loop non può interrompere il lavoro di altri programmi

Esperto

Nel proprio thread, altrettanti esperti - altrettanti thread di esecuzione per loro

Un esperto in loop non può interrompere il lavoro di altri programmi

Indicatore

Un thread di esecuzione per tutti gli indicatori su un simbolo. Tanti simboli indicatori - tanti thread di esecuzione per loro

Un loop infinito in un indicatore fermerà tutti gli altri indicatori su questo simbolo

Grazie, è quello che intendevo

Forum sul trading, sistemi di trading automatico e test di strategia

Bug, bug, domande

Slawa, 2017.02.06 07:22

Ma anche qui, non potete contare sul fatto che il comando Deinit su M5 sarà processato prima del comando Init su M15

 
-Aleks-:

Ahimè, non ho familiarità con questo formato.

L'esperimento ha mostrato che il numero nel buffer grafico è rappresentato dalle stesse regole del doppio - cioè non è possibile passare un numero così lungo attraverso il buffer grafico - frustrante.

Ahimè, il buffer grafico può contenere solo un numero di 10 cifre.

A proposito, perché c'è un limite di 4 decimali?

 

Errore di compilazione (o piuttosto nessun messaggio di errore)

class A {
public:
        int i;
};
class B : public A {};
class C : protected A {};
class D : protected B {};
void OnStart()
{
        C c;
        Print( c.i ); //Error: 'i' - protected member access error
        D d;
        Print( d.i ); //нормально???
}
 

Errore di esecuzione: caricamento EX5 fallito

class A;
typedef void (*f)( A*);
class A {
    virtual void g( A *a ) {}
        f ff;
};
void OnStart() { Print( __FUNCTION__ ); }
 

Errore durante l'esecuzione

class B;
void f( B* );
class A { public:
        virtual ~A() { f((B *)&this ); } //(*)
        virtual void g( A* ) { Print( __FUNCTION__ ); }
};
class B : public A { public:
        virtual void g( A* ) { Print( __FUNCTION__ ); }
};
void f( B *b ) { b.g( b ); }
void OnStart() //(1)
{
        B *b = new B;
        delete b;
}

Risultato: casting errato dei puntatori in (*)

E se

void OnStart() { B b; } //(2)

risultato: B::g

ma qual è la differenza fondamentale tra OnStart (1) e (2)?

Inoltre, il risultato di un codice simile in C++: A::g

 

A100: 

A cosa servirebbe un distruttore virtuale come quello del tuo esempio sopra? Può essere sovrascritto nel discendente?

 
fxsaber:

A cosa servirebbe un distruttore virtuale come quello del tuo esempio sopra? Può essere sovrascritto nel discendente?

In MQL è sempre virtuale, anche se non specificato esplicitamente
 
A100:
In MQL è sempre virtuale, anche se non esplicitamente dichiarato
Quindi non ha risposto alla domanda - per quale motivo?
 
fxsaber:
Quindi non hai risposto alla domanda - per cosa?
Se tutti i distruttori in MQL sono virtuali, allora la domanda perché abbiamo bisogno di un distruttore virtuale si riduce a: a cosa ci serve un distruttore? E questa è una domanda troppo generale.
 
A100:
Se tutti i distruttori in MQL sono virtuali, allora la domanda su cosa sia un distruttore virtuale si riduce alla domanda su cosa sia un distruttore? E questa è una domanda troppo generale.
So a cosa serve un distruttore. Non mi è chiaro perché dovrei aggiungere la parola virtuale prima della sua definizione.