たとえば、同じタイプの構造体の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で行われるのと同様のことを意味しますが、私のプールは完全に異なります。
ただし、上記のコードは意味をなさない多くのエラーで失敗します。それらのいくつかをコメントに含めました。
正しいアプローチは何でしょうか?
私の目標は、ポインタを構造体の配列に割り当てることです。これにより、選択した配列をトラバースできます。