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

 
comp :

예를 들어 지금 ObjectSetInteger에 대한 설명에서

그리고 그것은 있어야합니다

스레드를 끝까지 읽기

prop_id

【인】 개체 속성 식별자입니다. 값은 ENUM_OBJECT_PROPERTY_INTEGER 열거형 값 중 하나일 수 있습니다.

나는 이미 당신에게 말했다. 체커 없이 문서를 주의 깊게 읽으십시오.
 
Slawa :

스레드를 끝까지 읽기

나는 이미 당신에게 말했다. 체커 없이 문서를 주의 깊게 읽으십시오.

아주 주의 깊게 그리고 끝까지 읽으십시오. 거기에서 당신의 자신의 인용

개체 속성의 ID입니다. 값은 ENUM_OBJECT_PROPERTY_INTEGER 열거형 값 중 하나일 있습니다 .

하지만 당신은해야합니다

개체 속성의 ID입니다. 값은 ENUM_OBJECT_PROPERTY_INTEGER 열거형 값 중 하나여야 합니다( MUST ) .

이 유형에 대한 명시적 캐스트에 대한 요구 사항은 5가지 유형으로 컴파일된 유일한 변형 을 확인합니다(직접 확인). 이 고스트가 없으면 컴파일러는 해당 오버로드가 없다고 불평 합니다.

 
그 트릭을 몰랐습니다. 5중 메타에디터에서 mq4 파일을 열면 ex4로 컴파일됩니다!
 
하나의 컴파일러 하나의 편집기
 

즉, 읽기가 끝날 때 " 값이 ENUM_OBJECT_PROPERTY_INTEGER 열거형 의 값 중 하나일 수도 있고 아닐 수도 있습니다 . 그리고 아닐 수도 있고 문서에 나와 있지 않은 모든 것을 의미합니다. 금지되지 않은 것은 허용되지 않습니다. 우리는 프로그래밍에 대한 공공 생활의 원칙을 전파하기 때문에"

흥미롭게도 MetaEditor는 이 기능에 대한 매개변수를 설정할 때 해당 매개변수의 유형에 대해 무엇을 알려 주었습니까?

 
MQL 도움말에는 많은 모호성이 있습니다. 따라서 이러한 의미에서 comp는 옳습니다. 도움말을 읽는 데 가능한 해석 옵션이 적을수록 좋습니다.
 
Slawa :

즉, 읽기가 끝날 때 " 값이 ENUM_OBJECT_PROPERTY_INTEGER 열거형 의 값 중 하나일 수도 있고 아닐 수도 있습니다 . 그리고 아닐 수도 있고 문서에 나와 있지 않은 모든 것을 의미합니다. 금지되지 않은 것은 허용되지 않습니다. 우리는 프로그래밍에 대한 공공 생활의 원칙을 전파하기 때문에"

아니, 그렇게 생각하지 않았다. 코드가 MT4에서 오류 없이 컴파일되면 MT5에서도 오류 없이 컴파일되어야 한다고 생각했습니다. 이것이 일어나지 않을 때 그는 파기 시작했습니다. MT4 및 MT5의 코드를 확인하고

 class CHARTOBJECT
{
public :
   template < typename T>
   void SetProperty( const int id, const T Value, const int Modifier = 0 ) const
  {
     const string sType = typename (T);

     if (sType == "double" )
      :: ObjectSetDouble ( 0 , "" , id, Modifier, ( double )Value);
     else if (sType == "string" )
      :: ObjectSetString ( 0 , "" , id, Modifier, ( string )Value);
     else
      :: ObjectSetInteger ( 0 , "" , id, Modifier, ( long )Value);

     return ;
  } 
  
   virtual void operator =( const string Value ) const
  {
     this .SetProperty( OBJPROP_TEXT , Value);

     return ;
  }
};

흥미롭게도 MetaEditor는 이 기능에 대한 매개변수를 설정할 때 해당 매개변수의 유형에 대해 무엇을 알려 주었습니까?

이제 나는 보았고 위에 표시된 설명과 함께 정확하고 정확하게 프롬프트가 표시됩니다. 문서에는 int가 나와 있습니다.

 
comp :

아니, 그렇게 생각하지 않았다. 코드가 MT4에서 오류 없이 컴파일되면 MT5에서도 오류 없이 컴파일되어야 한다고 생각했습니다. 이것이 일어나지 않을 때 그는 파기 시작했습니다. MT4 및 MT5의 코드를 확인하고

왜 그런 겁니까?

MT4와 MT5는 본질적으로 다른 아키텍처를 가지고 있습니다.

MQL4를 이전 구문에서 새 구문(MQL4+라고 함)으로 변환할 때 열거형을 포함하여 많은 것이 부족한 이전 MQL4 구문을 되돌아볼 수 밖에 없었습니다.

 

comp, 일주일 동안 읽기 전용 자원 봉사를 합시다. 작가가 아니라 독자가 되십시오.

여기서 말하는 모든 것은 이미 이 포럼뿐만 아니라 MQL4.com 포럼에서도 여러 번 논의되고 다시 논의되었습니다.

 
Slawa :

왜 그런 겁니까?

MT4와 MT5는 본질적으로 다른 아키텍처를 가지고 있습니다.

MQL4를 이전 구문에서 새 구문(MQL4+라고 함)으로 변환할 때 열거형을 포함하여 많은 것이 부족한 이전 MQL4 구문을 되돌아볼 수 밖에 없었습니다.

당신은 오랫동안 논쟁할 수 있고 실패할 수 있습니다. 사실 문서에 int가 없으면 함수 이름을 입력할 때 힌트에서와 같이 컴파일러 욕에 대한 이유를 즉시 찾을 수 있습니다(템플릿이 있는 예제에서는 이것이 명확하지 않음). 문서에 따르면 코드를 컴파일해야 했기 때문에 int와 "할 수 있습니다". 설명서와 도구 설명이 일치하지 않는 이유를 모르겠습니다. 하지만 미래를 위해 오해가 있을 경우 문서가 아닌 힌트가 표시되는 것을 보는 것이 더 낫다는 것을 기억하겠습니다.