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

 
다시 한 번, MT5 코드(빌드 2380)를 컴파일할 때 쓸모없는 경고가 발생하는 문제가 있습니다.
개발자에게 불필요한 컴파일러 경고를 비활성화하는 것을 고려하십시오.
declaration of 'm_range' hides member   
   in template 'NodeArray < NodeArray <TailArray<int> >>' specified with [T=NodeArray < TailArray <int> >]      
   see previous declaration of 'm_range'        
declaration of 'm_range' hides member
   in template 'NodeArray < NodeArray <NodeArray<TailArray<int> >>>' specified with [T=NodeArray < NodeArray <TailArray<int> >>]
   see previous declaration of 'm_range'

소스 코드, 다차원 배열 프로토타입(C++ 온라인: https://onlinegdb.com/Hk7QjyRdL ):
 #define PRINT(x) ; Print ( #x, ":" , string (x))

template < typename T>
class TailArray{
protected :
   int m_index;
   T data[];
   
protected :
   TailArray(){}   
public :     
   TailArray( int size){
       ArrayResize (data, size);
      m_index = 0 ;
   };
   
   T value(){
       int index = m_index;
      m_index = 0 ;
       return data[index];
   }
   const T operator =( const T value){
      data[m_index] = (T)value;
      m_index = 0 ;
       return value;
   };
};

template < typename T>
class NodeArray : public T{
protected :
   int m_range;
   
protected :
   NodeArray(){}   
public :     
   NodeArray( const NodeArray &src){ this = src;}
   template < typename T_int> NodeArray(T_int count, T_int r1) : T(count * r1), m_range(r1){}
   template < typename T_int> NodeArray(T_int count, T_int r1, T_int r2) : T(count * r1, r2), m_range(r1){}
   template < typename T_int> NodeArray(T_int count, T_int r1, T_int r2, T_int r3) : T(count * r1, r2, r3), m_range(r1){}
   
   T* operator []( int index){
       this .m_index = this .m_index * this .m_range + index;
       return & this ;
   }
};


#define MultiArray(type, size) MultiArray ##size(type)
#define MultiArray2(type) NodeArray<NodeArray<TailArray<type>>>
#define MultiArray3(type) NodeArray<NodeArray<NodeArray<TailArray<type>>>>


template < typename T>
class MultiArrayCreate{
public :
   static MultiArray(T, 2 ) Size( int range_1, int range_2){
       return (MultiArray(T, 2 )(range_1, range_2, 1 ));
   }
   static MultiArray(T, 3 ) Size( int range_1, int range_2, int range_3){  
       return (MultiArray(T, 3 )(range_1, range_2, range_3, 1 ));
   }
};


void OnStart (){
   MultiArray( int , 2 ) arr_2 = MultiArrayCreate< int >::Size( 4 , 4 );
   MultiArray( int , 3 ) arr_3 = MultiArrayCreate< int >::Size( 4 , 4 , 4 );
   
   arr_2[ 0 ][ 0 ] = 2233 ;
   arr_3[ 3 ][ 3 ][ 3 ] = 4455 ;
   PRINT(arr_2[ 0 ][ 0 ].value());
   PRINT(arr_3[ 3 ][ 3 ][ 3 ].value());
}
 

좋은 오후에요 여러분!

CodeBase에 등록하고 이후에 게시하는 동안 스크립트 설명에 이미지를 삽입하는 방법을 알려주시겠습니까?

어쩐지 유투브에서 동영상을 삽입만 하고 있는데... 사진삽입 아이콘이 없어요! :(

미리 감사드립니다! :)

 
gsl17 :

좋은 오후에요 여러분!

CodeBase에 등록하고 이후에 게시하는 동안 스크립트 설명에 이미지를 삽입하는 방법을 알려주시겠습니까?

어쩐지 유투브에서 동영상을 삽입만 하고 있는데... 사진삽입 아이콘이 없어요! :(

미리 감사드립니다! :)

그림 삽입 버튼 버튼 그리기 일부 최소 등급부터 사용자가 사용할 수 있습니다. 분명히 당신은 버튼으로 작업하기에 충분한 평가가 없습니다 버튼 그리기 .

 
Vladimir Karputov :

사진을 삽입하는 버튼은 사용자가 특정 최소 등급부터 사용할 수 있습니다. 분명히 당신은 버튼으로 작업하기에 충분한 평가가 없습니다.

설명 감사합니다.

비애...

추신 예, 실제로 CodeBase에 스크립트를 게시한 것은 이번이 처음입니다.

 
기록에 대한 빌드 2390 mt 5 프로파일러 는 실제 데이터 번호에서 작동합니다.
 

템플릿 함수/클래스 캐시의 결함:
( MT5(build 2390)에 의해 수정 됨) *** ( up ) 정의되지 않은 동작, 내부 유형이 "C"인 복잡한 다중 래핑된 개체를 생성하고 완전히 다른 데이터 유형, 아마도 "B"로 판명되었습니다. 아마도 "int", 원하는 것이 무엇이든 ...
( MT5(빌드 2390)에 의해 수정 됨) * 컴파일 오류, 함수 포인터 인수를 const ref 템플릿으로 전달할 때 발생하는 버그.
( MT5(build 2390) 수정 ) * Compile Error, B<void*> 개체 뒤에 B<int> 개체가 생성될 수 있지만 이전에 완료되면 컴파일 오류가 발생합니다.


템플릿 기능/클래스 작업의 결함:
( MT5(build 2390)에 의해 수정 됨) ** ( up ) 템플릿 함수의 템플릿 매개변수에 대한 내부 클래스에 액세스하려고 할 때 발생하는 컴파일 오류, 버그.
( MT5(build 2390)에 의해 수정 됨) * ( up ) 템플릿 함수 내부의 버그인 컴파일 오류, 명시적 캐스트 작업의 일부로 전달된 포인터는 포인터처럼 다른 경우에는 클래스처럼 작동합니다.
(MT5(빌드 2390)에 의해 수정되지 않음 ) *** 컴파일 오류, 부적절한 경고 출력에 대한 주요 불만은 "사용되지 않는 동작, 향후 MQL 컴파일러 버전에서 숨겨진 메소드 호출이 비활성화됩니다"입니다. 현재 구현은 참새에 대포 사격입니다.
( MT5(build 2390)에 의해 수정되지 않음 ) ** 컴파일 오류, 반환 값이 템플릿 함수 인수의 유형에 따라 매개 변수 유형이 지정된 템플릿 클래스 내부에 있는 내부 클래스인 경우 버그가 템플릿 함수의 반환 값에 영향을 미칩니다. .
(MT5(build 2390)에 의해 수정되지 않음 ) ** 상속 및 내부 클래스에서 동일한 클래스 이름을 사용할 때 기본 클래스를 호출할 때 템플릿 생성자의 네임스페이스 및 범위와 관련된 컴파일 오류, 버그.
(MT5(빌드 2390)에 의해 수정되지 않음 ) * 컴파일 오류, 오버로드된 비 템플릿 함수에서 호출이 이루어질 때 명시적 인수 유형으로 템플릿 함수를 호출할 때 발생하는 버그.
(MT5(빌드 2390)에 의해 수정되지 않음 ) 컴파일 오류, 내부 클래스 정의 시 버그 - 기본 클래스를 지정할 때 전역 네임스페이스를 명시적으로 참조할 수 없습니다.
(MT5(빌드 2390)에 의해 수정 됨) ** 내부 클래스를 사용할 때 컴파일 오류, 템플릿 클래스 코드 생성 버그.
( MT5(build 2390)에 의해 수정 됨) * 컴파일 오류, 템플릿 메소드/클래스 생성 시 버그, 템플릿 매개변수의 "자동 교체" 프로세스가 범위를 넘어 메인 프로그램 코드로 넘어갑니다.
( MT5(build 2390)에 의해 수정 됨) * 템플릿 클래스가 템플릿 메서드에 대한 반환 값으로 작동할 때 템플릿 클래스 코드가 자동으로 생성되지 않는 버그인 컴파일 오류.
(MT5(빌드 2390)에 의해 수정 됨) * 컴파일 오류, 내부 구조체를 템플릿 함수에 전달할 때 발생하는 버그, 결과 데이터 형식은 템플릿 클래스의 다른 내부 구조체에 대한 기본 데이터 형식으로 사용할 수 없습니다.
(MT5(빌드 2390)로 수정 ) * 템플릿 클래스 내에서 템플릿 함수를 선언할 때 재사용된 템플릿 유형 이름을 확인하지 않아 예기치 않은 동작이 발생하는 컴파일 오류.
(MT5(빌드 2390)에 의해 수정 됨) 컴파일 오류, 개체가 템플릿 클래스/구조체일 때 "제자리에서 생성된" 개체 반환과 관련된 많은 버그.
( MT5(build 2368)에 의해 수정 됨) * (버그가 아니라 기능임) 기본 클래스 생성자에서 명시적 유형 변환을 수행하여 기본 클래스 개체에 대한 포인터를 부모에 대한 포인터로 캐스팅하는 것은 불가능합니다. 수업.
( MT5(build 2390)에 의해 수정되지 않음 ) (new) 템플릿 매개변수가 기본 클래스인 경우 템플릿 클래스에서 상속할 때 기본 액세스 한정자를 사용할 때 컴파일 오류가 발생합니다.
( MT5(build 2390)에 의해 수정되지 않음 ) * (new) 명시적 기본 클래스를 통해 할당 연산자를 호출할 때 컴파일 오류가 발생했습니다. 템플릿 매개변수가 기본 클래스인 템플릿 클래스에서 문제가 나타납니다.


C++와 비교하여 MQL에서 오버로드된 함수 호출 우선순위의 불일치와 관련된 결함:
( MT5(build 2390)에 의해 수정 됨) ** ( up ) 오버로드된 템플릿 함수 중 첫 번째가 완전히 특수화된 템플릿 기본 클래스를 사용하고 두 번째 함수가 특수화되지 않은 템플릿 기본 클래스를 사용할 때 컴파일 오류가 발생합니다.
( MT5(build 2390)로 수정되지 않음 ) ** Compile Error, 템플릿 함수 코드 생성 시 전달된 매개변수에 적합한 서명을 가진 오버로드된 템플릿 함수가 있음에도 불구하고 컴파일 오류가 발생합니다.
(MT5(빌드 2390)에 의해 수정되지 않음 ) * 템플릿 매개변수 수가 다른 오버로드된 템플릿 함수를 호출할 때 컴파일 오류, "오버로드된 함수에 대한 모호한 호출"이 발생합니다.
( MT5(build 2390)에 의해 수정 됨) ** ( up ) 컴파일 오류, 오버로드된 템플릿 함수에 대한 호출의 우선 순위는 실제로 템플릿 매개변수의 유형에 따라 달라지며 이론상 컴파일 결과에 어떤 영향도 주어서는 안 됩니다.
( MT5(build 2390)에 의해 수정 됨) *** 클래스 A <= B <= C <= D의 상속이 있고 두 개의 오버로드 함수가 구현되는 경우 컴파일 오류, 예를 들어 매개변수 A*가 있는 함수와 두 번째 함수가 구현되는 경우 B*를 사용하여 MQL에서 C* 또는 D* 개체의 이러한 함수에 전달하면 컴파일 오류가 발생합니다.
( MT5(빌드 2390)에 의해 수정 됨) ** 런타임, 오버로드된 템플릿 함수 호출에 대한 우선 순위 불일치.
( MT5(build 2390)에 의해 수정 됨) *** 런타임, 포인터 유형 인수에 대해 적절한 오버로드된 함수를 선택할 때 유형을 기본 클래스 대신 상위 클래스에 대한 포인터로 캐스팅하는 함수가 우선합니다.
(MT5(빌드 2390)에 의해 수정되지 않음 ) *** (신규) 컴파일 오류, 오버로드된 템플릿 함수의 호출 우선 순위 오류..
( MT5(build 2390)에 의해 수정되지 않음 ) ** (new) 컴파일 오류, 데이터 유형 색상이 있는 인수에 대한 함수를 호출 할 때 일치하는 서명을 가진 오버로드된 템플릿 함수가 있음에도 불구하고 암시적 유형 대화가 적용됨 색상 데이터 유형이 있습니다.
( MT5(build 2390)에 의해 수정되지 않음 ) * (new) 명시적 특수화에도 불구하고 오버로드된 템플릿 함수를 호출할 때 기본 템플릿 함수가 계속 호출되어 스택 오버플로가 발생합니다.
( MT5(build 2390)에 의해 수정되지 않음 ) * (new) 컴파일 오류, 함수 포인터 배열이 사용될 때 포인터를 통해 함수를 호출할 때 발생하는 컴파일 오류 .


MetaEditor 관련 버그:
(ME5(빌드 2390)에 의해 수정되지 않음 ) *** (신규) 디버거, 구조 정적 메서드 에서 중단점에 도달하면 MT 터미널이 중단됩니다.
( ME5(build 2390)에 의해 수정되지 않음 ) ** (new) Compilation, 컴파일 오류에 대한 설명이 256자 제한에 맞지 않고 잘려서 결과적으로 어떤 데이터 유형에 오류가 발생했는지 이해할 수 없습니다. 필요한 부분을 잘랐습니다.
(ME5(빌드 2390)에 의해 수정되지 않음 ) ** (신규) 디버거, StepInto(F11)가 작동하지 않고 중단점이 설정되었습니다.
( ME5(build 2390)에 의해 수정되지 않음 ) * (new) Debuger, (F5) 키를 누를 때 코드 실행을 계속하는 대신 중단점을 실행한 후 실제로 코드를 실행하지 않고 동일한 중단점을 다시 시작합니다.
( 수정되지 않은 ME5(빌드 2390)) * (신규) 컴파일, 오류 설명 및 매개변수 정보의 잘못된 기능 템플릿 매개변수 서명.
(ME5(빌드 2390)에 의해 수정되지 않음 ) * (신규) MetaEditor, 필요한 응용 프로그램 영역이 선택되었을 때 "뒤로 방향"과 함께 활성화된 "In selection"에 대해 교체 기능(Сtrl + H)이 작동하지 않지만, 전체 코드가 아닙니다.


기능의 느린 실행과 관련된 결함, 코드 최적화 프로그램의 작업:
( MT5(build 2390)에 의해 수정 됨) ** ( up ) 런타임, ArrayResize를 사용하여 배열에 하나의 요소를 추가할 때 큰 오버헤드가 발생함 더 느리게.


제안:
(신규) - 현재 프로젝트에 대한 ME 검색/바꾸기에 추가합니다. 그렇지 않으면 리팩토링할 때 각 파일을 살펴보고 어떻게든 잘 되지 않는 항목을 찾습니다.
링크 (신규) - ME에서 컴파일할 때 포함된 소스 파일에 대한 해당 정보로 빈 파일, 줄, 열 열을 채웁니다.
링크 - 클래스의 정적 메서드에 대한 Intellisense 작업을 기반으로 하는 네임스페이스 기능에 대한 Intellisense 지원 구현에 대해 설명합니다.
링크 - 리터럴 및 임시 변수를 const ref 함수 인수로 전달하는 기능 제공에 대해.
링크 - "프로젝트" 탭에서 프로젝트 파일을 이동할 때 열려 있고 ME 탭에 있는 파일을 이동하려면 위치 경로를 자동으로 업데이트합니다.
링크 - MQL typedef 선언에 기능을 도입해야 할 필요성에 대해.
링크 - 기본 복사 생성자 및 할당 연산자 생성을 강제하는 기능 제공에 대해.

 
ME에서 연결된 mqhs의 경로가 컴파일 중에 표시되지 않고 이름만 표시되는 것은 유감입니다.
 
"주문 및 거래" 모드에서 거래 내역을 표시할 때 열별로 정렬할 수 없습니다. 이 때문에 방금 이루어진 일부 트랜잭션은 목록의 끝이 아니라 중간에 있습니다.
 
fxsaber :

간단한 예입니다. 주어진 기간이 있는 MAC 배열이 필요합니다.

각 Mashka는 동일한 유형의 객체입니다. 분명히 Mashka는 기간에 의해 고유하게 설정됩니다. 따라서 const로 만드는 것이 논리적입니다.


ZY 다른 언어에서는 단순히 포인터 배열을 수행합니다. MQL에는 그러한 자유가 없습니다.

비논리적이야. 변경하지 않으려면 이것이 const를 만들 필요가 있음을 의미하지는 않습니다. 변수를 비공개로 만드는 것으로 충분합니다.

이것 덕분에 무언가를 얻는다면 논리적일 것입니다. 그러나 당신은 당신 자신에게만 문제 를 일으켰습니다.
Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2020.04.21
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
Sergey Dzyublik :

MQL 옵티마이저와 컴파일러가 어떻게 작동하는지 알고 있습니까?
단순 유형의 const 필드가 이러한 목적으로 사용되지 않는 이유는 무엇입니까?

옵티마이저는 그것과 전혀 관련이 없습니다.