Ошибки, баги, вопросы - страница 1647

 
Vasiliy Sokolov:

Объясните пожалуйста следующее поведение:

 

Это стабильно и в любой момент времени или на первом тике запущенного индикатора?

В окне вотча не хватает значения _LastError

 
Alexey Navoykov:

Вы уверены?

и при этомКак вы это себе представляете?  Если первое равно, то второе и подавно будет равно.
Пример для обеих платформ
// 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);    
}
Результат
NormalizeDouble(Price1(=1.234566), 5) = 1.23457
NormalizeDouble(Price2(=1.234574), 5) = 1.23457
NormalizeDouble(Price2-Price1(=0.000008), 5) = 0.00001
 

Ошибка при компиляции

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:

Ошибка при компиляции

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:
В Вашем примере ошибка обоснована, у меня другой случай
 
A100:
В Вашем примере ошибка обоснована, у меня другой случай

Невнимательно прочитал код, на автомате решил что у вас там условный оператор if, а у вас просто функция под названием f. 

Надо передавать в функцию переменную или какое то  значение заранее вычисленное, а не выражение.

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:

Надо передавать в функцию переменную или какое то  значение заранее вычисленное, а не выражение.

А в чем разница?

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

А в чем разница?

В первом случае передается переменная, во втором результат операции. И фиг его знает что там для инта наворочено

На самом деле эта ошибка со ссылкой бесит очень давно и сильно, не должно быть ее вообще.

 
A100:

А в чем разница?

Разница в том, что в первом случае ошибки нет :)
 

Есть предложения по поводу функции ArrayResize.   Нужно добавить возможность задавать параметр reserve_size равным -1, что означало бы использование предыдущего заданного значения.  Тогда не придётся хранить или таскать с собой это значение.  Достаточно будет вначале отресайзить с нужным резервом, и потом уже не беспокоиться об этом.  Иначе постоянные неудобства, когда передаёшь массив в какую-то функцию, которая ресайзит его, но ничего не знает о предустановленном на нём резерве, и в результате сбивает его, что приводит потом к лишним переаллокациям памяти.  Ведь я так понимаю, это значение где-то хранится для массива. Или нет?

Причина обращения: