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

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Особенности языка mql5, тонкости и приёмы работы

fxsaber, 2017.10.17 15:07

Массивы потомков не в состоянии преобразоваться в массивы предков. А вот поэлементно - да. В этом имеется ограничение ArrayCopy, которое было бы хорошо снять.

Что-то неправильное с языком в данной ситуации

struct RATES : public MqlRates {};

void f1( RATES& ) {}

void f2( MqlRates& ) {}
void f2( MqlRates &[] ) {}

void OnStart()

{
  MqlRates a = {0};  
  
  f1(a); // 'a' - parameter conversion not allowed
  
  RATES b[1] = {0};
  
  b[0] = a; // no problem
  a = b[0]; // no problem
  
  f2(b[0]); // no problem
  f2(b);    // 'f2' - no one of the overloads can be applied to the function call
}


Желтые и красные строки противоречат друг другу. Если идет наследование от структуры, при этом не меняется конструктор, оператор присваивания и не добавляются поля, то преобразование потомка в родилеля и наоборот должно происходить без проблем. И желтые строки это подтверждают. Однако, в некоторых ситуациях возникают обломы - красные.
 
fxsaber:

Что-то неправильное с языком в данной ситуации

У меня компилятор выдал


 
Kirill Belousov:

У меня компилятор выдал

Да, подправил сообщение.
 
   int tim=(int)FileGetInteger(aFileName,FILE_CREATE_DATE);
   int cur_tim=(int)TimeCurrent();

   RefreshRates();
   if(FileGetInteger(aFileName,FILE_EXISTS)==1)
      if(tim>0)
         if((cur_tim-tim)>120) 
           {
            Print(" ttt   "+TimeToString(cur_tim)+"  "+TimeToString(tim));
            FileDelete(aFileName);
            Print("Обновление файла ");
            return false;
           }

int tim=(int)FileGetInteger(aFileName,FILE_CREATE_DATE);    не обновляет время.

Создаю файл и хочу его удалить через 60 секунд, файл удаляется а int tim=(int)FileGetInteger(aFileName,FILE_CREATE_DATE); возвращает время первого файла после компиляции.  В окне виндовс я вижу что файл удаляется и создается с новым временем.

RefreshRates не помогает...

 

int tim=(int)FileGetInteger(aFileName,FILE_MODIFY_DATE);

Работает правильно

 
Vladimir Pastushak:

int tim=(int)FileGetInteger(aFileName,FILE_CREATE_DATE);    не обновляет время.

Создаю файл и хочу его удалить через 60 секунд, файл удаляется а int tim=(int)FileGetInteger(aFileName,FILE_CREATE_DATE); возвращает время первого файла после компиляции.  В окне виндовс я вижу что файл удаляется и создается с новым временем.

RefreshRates не помогает...

Где код создания файла?

Перед удалением файла Вы его закрываете?

При чём здесь RefreshRates?

Речь о пятёрке или о четвёрке?

 
Slava:

Где код создания файла?

Перед удалением файла Вы его закрываете?

При чём здесь RefreshRates?

Речь о пятёрке или о четвёрке?

А разве открытый файл можно удалить?

 
Alexey Viktorov:

А разве открытый файл можно удалить?

А разве у удалённого файла можно спросить время создания?

PS я вижу поток сознания, поэтому задал такие разные вопросы

 
Slava:

А разве у удалённого файла можно спросить время создания?

PS я вижу поток сознания, поэтому задал такие разные вопросы

Ну,,,,, если нельзя, но очень нужно,,,, то можно))))
 
Slava:

Где код создания файла?

Перед удалением файла Вы его закрываете?

При чём здесь RefreshRates?

Речь о пятёрке или о четвёрке?


         int h=FileOpen(aFileName,FILE_READ|FILE_WRITE|FILE_CSV|FILE_SHARE_READ|FILE_SHARE_WRITE);
         if(h!=INVALID_HANDLE)
            if(encode_text!=NULL && encode_text!="")
              {
               if(FileWrite(h,encode_text)>0)
                 {
                  FileClose(h);
                  return true;
                 }
              }

четверка