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

 

MT4/845, Windows 7/64bit. Сделал скрипт:

#property strict
double value=1/2;
//---
void OnStart()
  {
   Print("value = ",DoubleToString(value));
  }

В логах печатает:

2015.07.22 10:13:26.134    Test EURUSD,H1: value = 0.00000000

а ведь должно быть 0.50000000.

 
Надо писать 1.0/2 или 1/2.0 или 1.0/2.0 тогда будет то что ожидается.
 
Аноним:
Надо писать 1.0/2 или 1/2.0 или 1.0/2.0 тогда будет то что ожидается.
Да, ваш совет помог. Хотя казалось бы что и без .0 должно было бы работать.
 

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

Но и это не удается сделать, т.к. выдает сообщение, что котировки отсутствуют.

Конечно отсутствуют, ведь откуда у метаквот котировки с суффиксами?

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

 
Maxim Khrolenko:
Да, ваш совет помог. Хотя казалось бы что и без .0 должно было бы работать.
Неявное преобразование double в int.
 

Разный результат: так сомнительный результат

#import "Test.ex5"
        void f( uint, uint );
#import
        void f( uint, int  )   { Print( __FUNCSIG__ ); }
void OnStart()
{
        uint a = 0;
        f( 1, a ); //вызывается f(uint,int) - что само по себе сомнительно
}
а так - нормальный
        void f( uint, uint )    { Print( __FUNCSIG__ ); }
        void f( uint, int  )    { Print( __FUNCSIG__ ); }
void OnStart()
{
        uint a = 0;
        f( 1, a ); //вызывается f(uint,uint) - нормально
  
}
а какая разница?
 
A100:
а так - нормальныйа какая разница?
По хорошему если я правильно понимаю компилятор вообще должен ругнуться и не скомпилить. Т.к. там uint uint, там uint int, а в функцию передаются int, uint, неопределенность однако.
 
Аноним:
По хорошему если я правильно понимаю компилятор вообще должен ругнуться и не скомпилить. Т.к. там uint uint, там uint int, а в функцию передаются int, uint, неопределенность однако.

https://www.mql5.com/ru/docs/basis/function/functionoverload

Цитата: "Найденная функция должна быть наилучшим выбором среди остальных вариантов хотя бы по одному аргументу, и, в то же время, по остальным аргументам она должна подходить не хуже остальных."

Так какой здесь наилучший выбор для вызова f(int,uint)?

Подсказка: остальной аргумент в данном случае - первый 

Документация по MQL5: Основы языка / Функции / Перегрузка функций
Документация по MQL5: Основы языка / Функции / Перегрузка функций
  • www.mql5.com
Основы языка / Функции / Перегрузка функций - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Вот так - действительно была бы неопределенность

void f( uint )  { Print( __FUNCSIG__ ); }
void f( int  )  { Print( __FUNCSIG__ ); }
void OnStart()
{
        char ch = 0;
        f( ch ); // неопределенность 
}

которая странным образом преодолеватся компилятором, если переписать пример по другому

#import "Test.ex5"
        void f( uint );
#import
        void f( int  )  { Print( __FUNCSIG__ ); }
void OnStart()
{
        char ch = 0;
        f( ch ); // вызывается f(int), а должна генерироваться неопределенность
}
 
Ваша правда