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

 
Ошибка компиляции
struct STRUCT
{
  long l;
  
  STRUCT( void )
  {
  }
};

union UNION
{
  STRUCT Value; // 'STRUCT' has constructor and cannot be used as union member
};
 

1. Когда будет описание union в документации?

2. Это замена простым структурам?

3. будут ли поддерживать union приведение типа как описано для структур в документации?

 

вот как с помощью union можно скопировать структуру в массив char:

struct DATA
  {
   int      var1;
   uint     var2;
   float    var3;
   double   var4;
  };

union NAME_BIT
  {
   char  buff[20];
   DATA  data;
   NAME_BIT() {
      ArrayInitialize(buff, 0);
   }
  };

int OnInit() {
   NAME_BIT _space, _un_space;
   _space.data.var1 = 100;
   _space.data.var2 = 78;
   _space.data.var3 = 1.999f;
   _space.data.var4 = .0357;
   
   ArrayCopy(_un_space.buff, _space.buff);
   
//---
   return INIT_SUCCEEDED;
}

так можно попытаться исправить проблему тут. По сути все что было в _space скопировалось в _un_space, главное про выравнивание структур не забывать и размер массива буффера, хотя почему то менял расположение полей в структуре и данные все равно копировались нормально, но лучше все же придержаться выравнивания структур. Костыль но хоть так ))

 
Alexey Viktorov:

А почему массив обнуляется дважды?

)) забыл убрать, достаточно проинициализировать и все, уже исправил ))
 
Краш MetaEditor по F7
union UNION
{
  uchar Bytes[sizeof(MqlTick)];
  MqlTick Tick;
};

void OnStart()
{
  UNION a, b;
   
  a = b;
}
 
Konstantin:

скорее всего из-за того, что размер массива нужно объявить константой, тем более что размер MqlTick явно не изменится ))
Массив и объявляется константой. Краш редактора.
 
fxsaber:
Краш MetaEditor по F7

та же песня, скорее всего из-за копирования a = b; без него все нормально
 
fxsaber:
Массив и объявляется константой. Краш редактора.

не успел удалить ))
 
Подскажите, пожалуйста, планируется ли добавление использования template к union, что бы можно было так:
template<typename T>
union structToBytes
{
  uchar bytes[sizeof(T)];
  T data;
};
 

время очистки кэша тестерого агента какое в МТ5?

а то у меня выходит так - наоптимизировал,запускаешь прогон на реальных тиках, у меня в данном случае создается кэш на 6ГБ. при изменении даты тестирования,кэш освобождается. ну это и понятно, данные будут заново синхронизироваться.

но вот у меня кэш затирается минут через 5 - это нормально? если не запускаешь заново прогон,т.е. отошел от компа,вернулся, а он тебе заново туда-сюда пишет 6ГБ,это никакого жесткого диска не хватит, сотрется.

разве не логичней сделать  очистку кэша при изменении даты тестирования,советника или выгрузке терминала? к чему делать привязку по времени?

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