错误、漏洞、问题 - 页 1991

 
Alexey Kozitsyn:
为该结构添加一个默认构造函数。

关于交易、自动交易系统和交易策略测试的论坛

虫子,虫子,问题

fxsaber, 2017.09.06 09:38

// Нужен только для того, чтобы показать необходимость решения без конструктора
union UNION
{
  STRUCT Struct; // конструктора не должно быть
  int i;
};
 
fxsaber:

不专心的我:)你能解释一下为什么需要这样做吗?为什么不能使用构造函数?

还是为了显示结构初始化时有一个封闭场的错误?

 
Alexey Kozitsyn:

不专心的我:)你能解释一下为什么需要这样做吗?为什么不能使用构造函数?

因为在写我自己的代码时,我遇到了一个情况,我的结构参与了一个联盟。我立即想到了用空构造函数的解决方案,但我的代码中有一个联合体,这让我很无奈。这就是为什么我问这个问题,不是为了让我感到无聊,而是为了实际用途。


我不得不写下这个转折,以避免这个 "错误"(它到底是不是一个错误?)

// Зануляем структуру без конструктора со скрытыми полями
template <typename T>
void StructToNull( T& Struct )
{    
  union TMP_UNION
  {
    T Struct;
    
    struct TMP_STRUCT
    {
      uchar Array[sizeof(T)];
    } Tmp;
    
    TMP_UNION( T& Value )
    {
      ::ArrayInitialize(this.Tmp.Array, 0);
      
      Value = this.Struct;
    }
  } TmpUnion(Struct);    
}


我还没有看到任何其他解决方案。

 
fxsaber:
运行它,看到了问题。现在似乎只有公共领域的结构才允许有工会。那么就有可能写成结构={0}。
 
Alexey Kozitsyn:
运行它,看到了问题。现在似乎只有公共领域的结构才允许有工会。那么就有可能写成结构={0}。

事实并非如此

 
fxsaber:

事实并非如此

也许我又误解了你的意思,但这段代码在运行时没有任何警告。

struct STRUCT
{
//private:
  int i;

};

// Нужен только для того, чтобы показать необходимость решения без конструктора
union UNION
{
  STRUCT Struct; // конструктора не должно быть
  int i;
};

// Обходим Warning "possible use of uninitialized variable"
template <typename T>
void StructInit( T& ) {}

STRUCT Func()
{
  STRUCT Res = {0}; // ок!
  
//  StructInit(Res); // с этой строкой Warning не появляется, но это какой-то абсурд!
  
  return(Res);  
}

void OnStart()
{
  Func();
}
 
Alexey Kozitsyn:

也许我又误解了你的意思,但这段代码在运行时没有任何警告。

这就对了,公共结构被初始化了。但工会与此没有关系。


有趣的是,如果一个有隐藏字段的结构被变成一个新结构的公共字段,那么新结构也不会初始化,即使所有字段都是开放的。

 

你好,你能告诉我是否可以通过用变量指定数组中的元素数量来声明一个数组?如果没有,如何才能做到这一点?

extern int Period = 10;
int Massiv[Period]; //Выдаёт ошибку: "invalid index value"
 
giros:

你好,你能告诉我是否可以通过用变量指定数组中的元素数量来声明一个数组?如果没有,如何才能做到这一点?

https://www.mql5.com/ru/docs/array/arrayresize

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

你好,你能告诉我是否可以通过用变量指定数组中的元素数量来声明一个数组?如果没有,如何才能做到这一点?


阵列调整大小()