错误、漏洞、问题 - 页 1876

 
编译错误
struct STRUCT
{
  long l;
  
  STRUCT( void )
  {
  }
};

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

1.什么时候在文件中会有对工会的 描述?

2.它是简单结构 的替代物吗?

3.是否会像文档中描述的结构那样支持联合 类型的转换?

 

下面是如何使用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.999 f;
   _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<typename T>
union structToBytes
{
  uchar bytes[sizeof(T)];
  T data;
};
 

在MT5中清除测试代理的缓存的时间是什么?

当我改变测试日期时,缓存被释放。这可以理解,数据将被重新同步化。

但我这里的缓存在5分钟内就被覆盖了--这正常吗? 如果你不重启测试,即离开电脑,回来后,他又给你来回写了6GB,没有硬盘是不行的,会被擦掉。

当你改变测试日期、顾问或卸载终端时,清除缓存不是更合乎逻辑吗?