2017-01-17 9 views
1

나는 예를 들어, 동일한 유형의 struct의 3 개 별도의 배열을했습니다 : for C in here을 설명MQL에서 struct 배열에 포인터를 할당하는 방법은 무엇입니까?

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

와 유사합니다.

이러한 배열이 나중에 채워지므로 어떻게 이들 중 하나에 대한 공통 포인터를 만들 수 있습니까? 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)로 감싸는 것이 좋습니다. Daniel's answer에 나와있는대로 원하는 배열을 선택하고 CTradeReqArray 개체에 대한 포인터를 가져올 수 있습니다.