Errori, bug, domande - pagina 1647

 
Vasiliy Sokolov:

Si prega di spiegare il seguente comportamento:

È stabile e in ogni momento o al primo tick dell'indicatore di funzionamento?

Il valore _LastError manca nella finestra di wotch

 
Alexey Navoykov:

Sei sicuro?

Se il primo è uguale, il secondo sarà uguale.
Esempio per entrambe le piattaforme
// MQL4&5-code

#ifdef __MQL5__
  #define show_inputs script_show_inputs
#endif

#property show_inputs
#property strict

sinput double Price1 = 1.234566;
sinput double Price2 = 1.234574;

void NormToConsole( const double Price, const int digits, const string Str )
{
  Print("NormalizeDouble(" + Str + "(=" + DoubleToString(Price, digits + 1) +
        "), " + (string)digits + ") = " + DoubleToString(NormalizeDouble(Price, digits), digits));
}

#define  NORM2CONSOLE(PRICE) NormToConsole(PRICE, 5, #PRICE);

void OnStart()
{  
  NORM2CONSOLE(Price1);
  NORM2CONSOLE(Price2);
  NORM2CONSOLE(Price2 - Price1);    
}
Risultato
NormalizeDouble(Price1(=1.234566), 5) = 1.23457
NormalizeDouble(Price2(=1.234574), 5) = 1.23457
NormalizeDouble(Price2-Price1(=0.000008), 5) = 0.00001
 

Errore di compilazione

void f( int& i ){ Print( i ); }
void OnStart()
{
        int a, b;
        f( a = 5 ); //error: '=' - parameter passed as reference, variable expected
        f( b = a ); //error: '=' - parameter passed as reference, variable expected
}
 
A100:

Errore di compilazione

void f( int& i ){ Print( i ); }
void OnStart()
{
        int a, b;
        f( a == 5 ); //error: '=' - parameter passed as reference, variable expected
        f( b == a ); //error: '=' - parameter passed as reference, variable expected
}
 
Vitalii Ananev:
Nel tuo esempio l'errore è giustificato, il mio caso è diverso
 
A100:
Nel tuo esempio l'errore è giustificato, nel mio caso è diverso

Non ho letto attentamente il codice e ho pensato automaticamente che avete un'istruzione condizionale if, ma avete solo una funzione chiamata f.

Dovreste passare una variabile o un valore precalcolato alla funzione, non un'espressione.

void f( int& i ){ Print( i ); }
void OnStart()
{
        int a = 5;
        int b = a;
        f(a); //error: '=' - parameter passed as reference, variable expected
        f(b); //error: '=' - parameter passed as reference, variable expected
}
 
Vitalii Ananev:

Dovete passare una variabile o qualche valore precalcolato nella funzione, non un'espressione.

Qual è la differenza?

//1.mq5
         a = 5;
         f( a );
//2.mq5
         f( a = 5 );
 
A100:

Qual è la differenza?

Nel primo caso, viene passata una variabile, nel secondo, il risultato dell'operazione. E chissà cosa è stato escogitato per l'assunzione

In effetti, questo errore di riferimento è stato fastidioso per molto tempo, e non dovrebbe esserci affatto.

 
A100:

Qual è la differenza?

La differenza è che nel primo caso non c'è nessun errore :)
 

Ci sono alcuni suggerimenti sulla funzione ArrayResize. Abbiamo bisogno di aggiungere la possibilità di impostare il parametroreserve_size a -1, il che significherebbe usare il valore precedentemente impostato. Alloranon dovremmo memorizzare o portare in giro questo valore. Sarebbe sufficiente ridimensionare prima con la riserva richiesta, e poi non preoccuparsene .Altrimenti, è un inconveniente costante, quando si passa un array a qualche funzione, che lo ridimensiona, ma non sa nulla della riserva preimpostata su di esso, e come risultato lo esaurisce, portando a riallocazioni di memoria non necessarie in seguito. Dopo tutto, suppongo, questo valore è memorizzato da qualche parte per un array. O non lo è?

Motivazione: