오류, 버그, 질문 - 페이지 2952

 
Alexey Rassvetnyy :

결함을 수정하십시오. MQL5는 일부 내장 열거형을 일반 매개변수로 사용하는 것을 허용하지 않습니다(예: ENUM_CHART_PROPERTY_DOUBLE, ENUM_CHART_PROPERTY_STRING).

사용자 지정 열거형 및 기타 내장 열거형에는 문제가 없습니다.

열거형에 null 값이 있는 요소가 없기 때문에 문제가 발생합니다. 이 컴파일 오류 를 생성하는 나만의 열거형을 만들었습니다.

 #include <Generic\HashMap.mqh>
enum TEST_ENUM {
   ENUM1, ENUM2
};
enum TEST_ENUM2 { //отсутствует элемент с номером 0
   ENUM1=- 10 , ENUM2
};
void OnStart ()
  {
   CHashMap< ENUM_CHART_PROPERTY_INTEGER , int > mapI;     // эта срока комилируется без ошибок
   CHashMap< ENUM_CHART_PROPERTY_DOUBLE , double > mapD;   // здесь ошибки компиляции: 'NULL' - cannot convert enum  HashMap.mqh     21      39. 'NULL' - cannot convert enum        HashMap.mqh     462     30
   CHashMap< ENUM_CHART_PROPERTY_STRING , string > mapS;   // здесь ошибки компиляции: 'NULL' - cannot convert enum  HashMap.mqh     21      39. 'NULL' - cannot convert enum        HashMap.mqh     462     30
   CHashMap<TEST_ENUM, double > mapE;     // эта срока комилируется без ошибок
   CHashMap<TEST_ENUM2, double > mapE2;     // здесь ошибки компиляции: 'NULL' - cannot convert enum       HashMap.mqh     21      39. 'NULL' - cannot convert enum        HashMap.mqh     462     30
  }
 
Alexey Rassvetnyy :

열거형에 null 값이 있는 요소가 없기 때문에 문제가 발생합니다. 이 컴파일 오류 를 생성하는 나만의 열거형을 만들었습니다.

귀하의 경우 라이브러리 파일을 수정하면 도움이 될 것입니다.

 //+------------------------------------------------------------------+
//| fix HashMap.mqh                                                  |
//|  line 21  | was | Entry(void): key(NULL) {}                      |
//|           | now | Entry(void): key((TKey)NULL) {}                |
//|  line 462 | was | m_entries[i].key=NULL;                         |
//|           | now | m_entries[i].key=(TKey)NULL;                   |
//+------------------------------------------------------------------+
 
DMITRII PECHERITSA :

귀하의 경우 라이브러리 파일을 수정하면 도움이 될 것입니다.

감사합니다. 작동합니다.

그러나 MQ를 지원하는 파일을 수동으로 수정하면 다음에 업데이트할 때 변경 사항이 롤백됩니다. 표준 라이브러리를 지원하는 개발자는 표준 라이브러리 의 코드 전체에 걸쳐 NULL을 매개변수 유형으로 캐스팅하거나 명시적 표시 없이 NULL이 모든 유형으로 자동 캐스팅될 수 있도록 컴파일러를 조정해야 합니다.

 
Alexey Rassvetnyy :

표준 라이브러리를 지원하는 개발자는 표준 라이브러리 의 코드 전체에 걸쳐 NULL을 매개변수 유형으로 캐스팅하거나 명시적 표시 없이 NULL이 모든 유형으로 자동 캐스팅될 수 있도록 컴파일러를 조정해야 합니다.

개발자에게는 단순할수록 더 좋다는 원칙이 있습니다. 뭐, 어셈블러가 아니라 좋은 거니까 사용하세요. 그럴 수도 있습니다.

 
DMITRII PECHERITSA :

귀하의 경우 라이브러리 파일을 수정하면 도움이 될 것입니다.

메시지 주셔서 감사합니다.

SB에 이러한 변경 사항을 적용했습니다.

 
Ilyas :

메시지 주셔서 감사합니다.

SB에 이러한 변경 사항을 적용했습니다.

키뿐만 아니라 값에 대해서도 수정되었습니까?

 
Stanislav Korotky :

키뿐만 아니라 값에 대해서도 수정되었습니까?

예, 가치에 대해서도

 
Ilyas :

디버거에서 구조의 내용을 표시할 때 관찰 가능 항목에서 일부 필드를 제거할 수 있습니까?


여러 대형 구조물이 있습니다. 5개 분야에서 눈으로 비교해야 합니다. 작동하지 않습니다.

 

안녕하세요! 문제를 해결하는 데 도움이 됩니다.

MT5 Expert Advisor에서 거래 요청을 보내고 확인하기 전에 다음 type_filling 정의를 사용합니다.

 // тип FILLING
int SYMBOL_FILLING = ( int ) SymbolInfoInteger (iNameSymbol, SYMBOL_FILLING_MODE );
switch (SYMBOL_FILLING)
{
   case SYMBOL_FILLING_FOK :   iЗапрос.type_filling = ORDER_FILLING_FOK ;     break ;
   case SYMBOL_FILLING_IOC :   iЗапрос.type_filling = ORDER_FILLING_IOC ;     break ;
   default :                   iЗапрос.type_filling = ORDER_FILLING_RETURN ; break ;
}

그러나 그러한 구성이 모든 브로커가 아닌 모든 계정에서 작동하지 않는다는 사실을 알게되었고 OrderCheck를 통해 완료된 요청을 확인한 후 오류 10030이 나타납니다 ( 잔액별로 지원되지 않는 주문 실행 유형 이 지정됨). 이 경우 SYMBOL_FILLING = 3이고 ORDER_FILLING_RETURN 유형이 선택됩니다.

저는 CTrade와 같은 외부 라이브러리를 사용하지 않습니다. 내 질문에 대한 답변을 얻을 수 있는 곳으로 안내하거나 도와주세요.

미리 감사드립니다!

 
fxsaber :

디버거에서 구조의 내용을 표시할 때 관찰 가능 항목에서 일부 필드를 제거할 수 있습니까?


여러 대형 구조물이 있습니다. 5개 분야에서 눈으로 비교해야 합니다. 작동하지 않습니다.

소스에서 변수 위에 마우스를 올려서 변수 값을 표시하는 것이 가장 좋습니다. 이렇게 하면 감시 목록에 아무것도 추가할 필요가 없으며 중첩 필드는 일련의 역참조 없이 사용할 수 있습니다. 필드).

사유: