1

たとえば、同じタイプの構造体の3 つの個別の配列があります。

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

here の C の説明と同様です。

これらの配列が後で設定されると仮定すると、これらの配列への共通のポインターを作成するにはどうすればよいでしょうか?


だから私は次のようなことができます: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で行われるのと同様のことを意味しますが、私のプールは完全に異なります。

ただし、上記のコードは意味をなさない多くのエラーで失敗します。それらのいくつかをコメントに含めました。

正しいアプローチは何でしょうか?

私の目標は、ポインタを構造体の配列に割り当てることです。これにより、選択した配列をトラバースできます。

4

3 に答える 3