MQL5不允许动态数组存储值

时间:2018-03-26 07:53:12

标签: mql5 metatrader5

我正在尝试使用MQL 5阵列的存储。当我没有使用任何ArrayResize()时,我收到错误:

double d [];
d[0] = 1;
for (int i = 0; i< ArraySize(d); i++)
   {
   Print(d[i]);

错误如下:

2018.03.26 13:17:25.379 2018.02.02 00:00:00   array out of range in 'testing.mq5' (69,2)

当我使用ArrayResize()时,我得到了输出。

double d [];
ArrayResize(d,2);
d[0] = 1;
for (int i = 0; i< ArraySize(d); i++)
   {
   Print(d[i]);
   }

输出:1

有效。但是,如果我尝试将数组元素添加到数组大小之外,那么我会得到out of range错误。

我将要实现的是,数组必须保持动态的大小透视 假设我给出的大小为2,在我的程序中,需要添加3的数组元素,然后数组必须接受它。

我无法使用ArrayResize(),因为它会消除我不想发生的其他价值。
请注意,建议我中间出路,以便我可以在数组中输入任意数量的值而不管其大小。

1 个答案:

答案 0 :(得分:0)

#include <Arrays\ArrayObj.mqh>适用于存储任何类的对象,ArrayInt用于整数列表,ArrayDouble用于存储双精度和浮点数列表。根据需要添加任意数量,您将永远不必调整大小或从数组中删除索引。

CArrayInt *integers;
OnInit(){integers=new CArrayInt();}
OnDeinit(int reason){delete(integers);}
OnTick(){
   integers.Add(0);integers.Add(1);integers.Add(2);
   int firstElem=integers.At(0); firstElem=integers[0];
   int lastElem=integers.At(integers.Total()-1);
   int totalElementsInTheList=integers.Total();
   integers.Delete(2); // delete element with index 2. deleting element that match with the object is not supported in basic API
}