如何在MQL中为struct数组指定指针?

时间:2017-01-17 20:16:55

标签: pointers struct compiler-errors mql5

我有3个相同类型的struct个独立数组,例如:

MqlTradeRequest orders1[];
MqlTradeRequest orders2[];
MqlTradeRequest orders3[];

与描述for C in here类似。

假设稍后会填充这些数组,我如何创建一个指向其中一个的公共指针?

所以我可以这样做:orders_ptr = &orders1*orders_ptr = orders1

这是我的非工作代码:

MqlTradeRequest orders1[];
MqlTradeRequest orders2[];
MqlTradeRequest orders3[];

enum ORDERS_POOL {
  POOL1,
  POOL2,
  POOL3
};

void start(ORDERS_POOL _pool = POOL1) {
  MqlTradeRequest (*orders_ptr)[]; // Error: Invalid operation use.
  switch (_pool) {
    case POOL1: orders_ptr = &orders1; break; // Error: Invalid array access, class type expected.
    case POOL2: orders_ptr = &orders2; break; // Error: Invalid array access, class type expected.
    case POOL3: orders_ptr = &orders2; break; // Error: Invalid array access, class type expected.
  }
  for (int i = 0; i < ArraySize(orders_ptr); i++) {
    Print(orders_ptr[i].order);
  }
};

这是另一次尝试:

  MqlTradeRequest *orders_ptr; // Error: Invalid operation use.
  switch (_pool) {
    case POOL1: *orders_ptr = GetPointer(orders1); break; // Error: Object pointer expected.
    case POOL2: *orders_ptr = GetPointer(orders2); break; // Error: Object pointer expected.
    case POOL3: *orders_ptr = GetPointer(orders2); break; // Error: Object pointer expected.
  }

在不同的池中,我的意思与OrderSelect中使用 pool 参数的内容类似,但我的池完全不同。

但是上面的代码失败并且有很多错误没有任何意义,我在评论中包含了一些错误。

什么是正确的方法?

我的目标是分配一个指向struct数组的指针,这样我就可以遍历所选的数组。

2 个答案:

答案 0 :(得分:1)

对我来说,你不能在MQL5中做到这一点。
你可以像动作对象一样使用指针,对于结构,它是一个静态指针,与数组或基元相同,而MqlRates是一个结构不是类。
如果你真的需要这样的魔法 - 创建具有Mql结构数组的类。

答案 1 :(得分:0)

根据MQL支持团队的回复,无法创建指向结构类型对象的指针,也无法获取指向数组的指针。

相反,建议将MqlTradeRequest数组包装到类对象(例如CTradeReqArray),然后可以选择所需的数组并获取指向CTradeReqArray对象的指针,如Daniel's answer中所示。