2017-01-17 4 views
1

Я 3 отдельные массивы struct одного и того же типа, например:Как назначить указатель на массив структуры в MQL?

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 с бассейном аргументу , но мои бассейны совершенно разные.

Однако выше кода не удается с большим количеством ошибок, которые не имеют никакого смысла, я включил некоторые из них в комментарии.

Каким будет правильный подход?

Моя цель - назначить указатель на массив структуры, чтобы я мог пройти через выбранный массив.

+1

[out-of-record] Ваши недавние проблемы кажутся действительно творческим испытанием на пытку внутренних границ синтаксиса * New * -'MQL4/5'. Удачи на охоте! Всегда вдохновляющий толпа, человек +1! – user3666197

ответ

1

Кажется, вы не можете сделать это на MQL5.
Вы можете использовать указатели для динамических объектов только как классы, для структур это статический указатель, такой же, как массив или примитив, а MqlRates - это структура, не являющаяся классом.
Если вам действительно нужна такая магия - создайте классы, в которых есть массив Mql-структур.

0

Согласно ответам команды поддержки MQL, невозможно создать указатели на объекты типа структуры, и вы не можете получить указатель на массив.

Вместо этого предлагается преобразовать массив MqlTradeRequest в объект класса (например, CTradeReqArray), тогда можно выбрать нужный массив и получить указатель на объект CTradeReqArray, как предлагается в Daniel's answer.

Смежные вопросы