Erros, bugs, perguntas - página 1647

 
Vasiliy Sokolov:

Por favor, explique o seguinte comportamento:

É estável e está sempre estável ou no primeiro tique do indicador de funcionamento?

O valor _LastError está em falta na janela de wotch

 
Alexey Navoykov:

Tem a certeza?

e ao mesmo tempo Como se calcula isso? Se o primeiro for igual, o segundo será igual.
Exemplo para ambas as plataformas
// 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);    
}
Resultado
NormalizeDouble(Price1(=1.234566), 5) = 1.23457
NormalizeDouble(Price2(=1.234574), 5) = 1.23457
NormalizeDouble(Price2-Price1(=0.000008), 5) = 0.00001
 

Erro de compilação

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:

Erro de compilação

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:
No vosso exemplo o erro é justificado, o meu caso é diferente
 
A100:
No seu exemplo o erro é justificado, no meu caso é diferente

Não li o código com cuidado e pensei automaticamente que tinha uma declaração condicional se, mas apenas uma função chamada f.

Deve passar uma variável ou algum valor pré-calculado para a função, não uma expressão.

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:

É preciso passar uma variável ou algum valor pré-calculado para a função, não uma expressão.

Qual é a diferença?

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

Qual é a diferença?

No primeiro caso, uma variável é passada, no segundo, o resultado da operação. E quem sabe o que é que ali se conseguiu para a entrada

De facto, este erro de referência tem sido aborrecido durante muito tempo, não deveria estar lá de todo.

 
A100:

Qual é a diferença?

A diferença é que, no primeiro caso, não há erro :)
 

Há algumas sugestões sobre a função ArrayResize. Precisamos de acrescentar a possibilidade de definir o parâmetroreserva_tamanho a -1, o que significaria utilizar o valor definido anteriormente. Depoisnão teríamos de armazenar ou transportar este valor. Seria suficiente primeiro redimensioná-lo com a reserva necessária, e depois não nos preocuparmos com isso .Caso contrário, é um inconveniente constante, quando se passa uma matriz para alguma função, que a redimensiona, mas não sabe nada sobre reserva predefinida nela, e como resultado a reduz, conduzindo a reafectações desnecessárias de memória mais tarde. Afinal, suponho, este valor é armazenado em algum lugar para uma matriz. Ou não é?