MT5 버그(빌드 2367) C++의 템플릿 기능과 비교하여 MQL의 템플릿 기능 실행 우선 순위가 일치하지 않습니다(온라인: https://onlinegdb.com/B172m1PLL ). 버그 수정의 일환으로 컴파일 오류가 수정되었지만 오버로드된 템플릿 함수의 실행 우선 순위가 C ++의 동작에 가져오지 않은 것 같습니다.
template < typename T>
struct B{
T data;
};
template < typename T>
struct BB : public B<T>{};
template < typename T>
struct A{
public :
staticvoid test(T& src){
printf ( "1" );
}
template < typename TT>
staticvoid test(B<TT>& src){
printf ( "2" );
}
};
struct AA{
public :
staticvoid test(B< int >& src){
printf ( "1" );
}
template < typename TT>
staticvoid test(B<TT>& src){
printf ( "2" );
}
};
voidOnStart (){
BB< int > bb;
A<B< int >>::test(bb); // MQL:2, should be 1
AA::test(bb); // MQL:2, should be 1
}
I have a macro that takes a number of arguments, one of which is a type. For instance: If I try to instantiate this with a template type, say: This will not work as intended, as the pre-processor knows nothing of templates. It will...
템플릿 함수/클래스 캐시의 결함: ( MT5(build 2368)에 의해 수정 됨) *** ( up ) 정의되지 않은 동작, 내부 유형 "C"로 복잡한 다중 래핑된 개체를 생성하고 완전히 다른 데이터 유형, 아마도 "B"로 판명되었습니다. 아마도 "int", 원하는 것이 무엇이든 ... ( MT5(build 2368)에 의해 수정 됨) * 컴파일 오류, 함수 포인터 인수를 const ref 템플릿 인수로 전달할 때 발생하는 버그. ( MT5(build 2368)에 의해 수정 됨) * 컴파일 오류, B<void*> 개체 뒤에 B<int> 개체가 생성될 수 있지만 이전에 완료되면 컴파일 오류가 발생합니다.
템플릿 기능/클래스 작업의 결함: ( MT5(build 2368)에 의해 수정 됨) *** ( up ) 템플릿 함수 내부의 버그인 컴파일 오류, 명시적 캐스트 작업의 일부로 전달된 포인터는 포인터처럼 다른 경우에는 클래스처럼 작동합니다. ( MT5(build 2368)에 의해 수정 됨) ** ( up ) 템플릿 함수의 템플릿 매개변수에 대한 내부 클래스에 액세스하려고 할 때 발생하는 컴파일 오류, 버그. (MT5(빌드 2368)로 수정되지 않음 ) *** 컴파일 오류, 부적절한 경고 출력에 대한 주요 불만은 "사용되지 않는 동작, 향후 MQL 컴파일러 버전에서 숨겨진 메소드 호출이 비활성화됩니다"입니다. 현재 구현은 참새에 대포 사격입니다. ( MT5(build 2368)에 의해 수정되지 않음 ) ** 컴파일 오류, 반환 값이 템플릿 함수 인수의 유형에 따라 매개 변수 유형이 지정된 템플릿 클래스 내부에 있는 내부 클래스인 경우 버그가 템플릿 함수의 반환 값에 영향을 미칩니다. . (MT5(build 2368)에서 수정되지 않음 ) ** 상속 및 내부 클래스에서 동일한 클래스 이름을 사용하는 경우 기본 클래스를 호출할 때 템플릿 생성자의 네임스페이스 및 범위와 관련된 컴파일 오류, 버그. (MT5(빌드 2368)에 의해 수정되지 않음 ) * 컴파일 오류, 오버로드된 비 템플릿 함수에서 호출이 수행될 때 명시적 인수 유형으로 템플릿 함수를 호출할 때 발생하는 버그. (MT5(빌드 2368)로 수정되지 않음 ) 컴파일 오류, 내부 클래스 정의 시 버그 - 기본 클래스를 지정할 때 전역 네임스페이스를 명시적으로 참조할 수 없습니다. (MT5(빌드 2368)에 의해 수정 됨) ** 내부 클래스를 사용할 때 컴파일 오류, 템플릿 클래스 코드 생성 버그. ( MT5(build 2368)에 의해 수정 됨) * 컴파일 오류, 템플릿 메서드/클래스 생성 시 버그, 템플릿 매개변수의 "자동 교체" 프로세스가 범위를 넘어 메인 프로그램 코드로 넘어갑니다. ( MT5(build 2368)에 의해 수정 됨) * 템플릿 클래스가 템플릿 메서드의 반환 값으로 작동할 때 템플릿 클래스 코드가 자동으로 생성되지 않는 버그인 컴파일 오류. ( MT5(build 2368)에 의해 수정 됨) * 컴파일 오류, 템플릿 함수에 내부 구조체를 전달할 때 발생하는 버그, 결과 데이터 형식은 템플릿 클래스의 다른 내부 구조체에 대한 기본 데이터 형식으로 사용할 수 없습니다. ( MT5(빌드 2368)로 수정 ) * 템플릿 클래스 내에서 템플릿 함수를 선언할 때 재사용된 템플릿 유형 이름을 확인하지 않아 예기치 않은 동작이 발생하는 컴파일 오류. (MT5(빌드 2368)에 의해 수정 됨) 컴파일 오류, 개체가 템플릿 클래스/구조체일 때 "제자리에서 생성된" 개체 반환과 관련된 많은 버그. ( MT5(build 2368)에 의해 수정되지 않음 ) * (버그가 아니라 기능입니다) 기본 클래스 생성자에서 명시적 유형 변환을 수행하여 기본 클래스 개체에 대한 포인터를 부모 클래스.
C++와 비교하여 MQL에서 오버로드된 함수 호출 우선순위의 불일치와 관련된 결함: ( MT5(build 2368)에 의해 수정 됨) ** ( up ) 컴파일 오류, 오버로드된 템플릿 함수에 대한 호출의 우선순위는 실제로 템플릿 매개변수의 유형에 따라 달라지며 이론상 컴파일 결과에 어떤 영향도 주어서는 안 됩니다. ( MT5(build 2368)에 의해 수정 됨) ** ( up ) 오버로드된 템플릿 함수 중 첫 번째가 완전히 특수화된 템플릿 기본 클래스를 사용하고 두 번째 템플릿이 비특수화된 템플릿 기본 클래스를 사용할 때 컴파일 오류가 발생합니다. ( MT5(빌드 2368)로 수정되지 않음 ) ** 컴파일 오류, 템플릿 함수 코드 생성 시 전달된 매개 변수에 적합한 서명을 가진 오버로드된 템플릿 함수가 있음에도 불구하고 컴파일 오류가 발생합니다. (MT5(빌드 2368)에 의해 수정되지 않음 ) * 템플릿 매개변수의 수가 다른 오버로드된 템플릿 함수를 호출할 때 컴파일 오류, "오버로드된 함수에 대한 모호한 호출"이 발생합니다. ( MT5(빌드 2368)에 의해 수정 됨) *** 컴파일 오류, 클래스 A <= B <= C <= D의 상속이 있고 두 개의 오버로딩 기능이 구현되는 경우(예: 매개변수 A* 및 두 번째 B*를 사용하는 경우 MQL에서 C* 또는 D* 객체의 이러한 함수에 전달하면 "모호 오버로드된 함수 호출" 컴파일 오류가 발생합니다. ( MT5(빌드 2368)에 의해 수정 됨) ** 런타임, 오버로드된 템플릿 함수 호출에 대한 우선 순위 불일치.
기능의 느린 실행과 관련된 결함, 코드 최적화 프로그램의 작업: ( MT5(빌드 2368)에 의해 수정 됨) ** 런타임, ArrayResize를 사용하여 하나의 요소를 배열에 추가할 때 큰 오버헤드가 발생합니다. 예를 들어 최대 7배 느린 구조의 경우 해당 메모리가 미리 예약되어 있음에도 불구하고.
제안: (신규) 링크 - 클래스의 정적 메서드에 대한 Intellisense 작업을 기반으로 하는 네임스페이스 기능에 대한 Intellisense 지원 구현에 대해 설명합니다. 링크 - 리터럴 및 임시 변수를 const ref 함수 인수로 전달하는 기능 제공에 대해. 링크 - "프로젝트" 탭에서 프로젝트 파일을 이동할 때 열려 있고 ME 탭에 있는 파일을 이동하려면 위치 경로를 자동으로 업데이트합니다. 링크 - MQL typedef 선언에 기능을 도입해야 할 필요성에 대해. 링크 - 기본 복사 생성자 및 할당 연산자 생성을 강제하는 기능 제공에 대해.
기본 클래스의 명시적 표시를 통해 할당 연산자를 호출할 때 MT5 버그(빌드 2368) 컴파일 오류가 발생 했습니다. 템플릿 매개변수가 기본 클래스인 템플릿 클래스에 대해 문제가 나타납니다. 이전에는 모든 것이 제대로 작동했으며 분명히 다른 결함을 수정하는 과정에서 문제가 발생했습니다.
struct A{
uchar data;
voidoperator =( int n){
printf ( "1" );
}
};
template < typename T>
struct B : public T{
voidoperator =( int n){
T:: operator =(n); // 'operator' - undeclared identifier
}
};
voidOnStart (){
B<A> b;
b = 0 ;
}
MT5 버그(빌드 2367) C++의 템플릿 기능과 비교하여 MQL의 템플릿 기능 실행 우선 순위가 일치하지 않습니다(온라인: https://onlinegdb.com/B172m1PLL ).
버그 수정의 일환으로 컴파일 오류가 수정되었지만 오버로드된 템플릿 함수의 실행 우선 순위가 C ++의 동작에 가져오지 않은 것 같습니다.
재미있는 문제에 봉착했습니다. 여러 매개변수 유형이 있는 템플릿 유형을 매크로에 전달할 수 없습니다. 전처리기가 템플릿을 처리하고 있다는 사실을 모르고 쉼표로 매개변수를 계산하기 때문입니다.
SO 에서 C++에 대한 문제 및 솔루션에 대한 설명을 찾았습니다.
MQL을 시도했지만 불행히도 작동하지 않습니다. 컴파일러는 전달된 유형에서 설명하는 변수에 대해 "선언되지 않은 식별자" 오류를 제공합니다.
지금까지 파생 클래스를 추가로 관리했는데 C++처럼 고칠 수 있나요?
죄송합니다. 해결책을 찾았습니다. 작동 방식은 다음과 같습니다.
#define COMMA() ,
질문이 제거되었습니다.MT5 버그(빌드 2367) 오버로드된 템플릿 함수의 위치가 컴파일 결과에 영향을 줍니다.
작업이 수행된 초기 티켓 - https://www.mql5.com/ru/forum/1111/page2655#comment_15119627
C++ 온라인( https://onlinegdb.com/BJzbH2DLL ).
템플릿 함수/클래스 캐시의 결함:
( MT5(build 2368)에 의해 수정 됨) *** ( up ) 정의되지 않은 동작, 내부 유형 "C"로 복잡한 다중 래핑된 개체를 생성하고 완전히 다른 데이터 유형, 아마도 "B"로 판명되었습니다. 아마도 "int", 원하는 것이 무엇이든 ...
( MT5(build 2368)에 의해 수정 됨) * 컴파일 오류, 함수 포인터 인수를 const ref 템플릿 인수로 전달할 때 발생하는 버그.
( MT5(build 2368)에 의해 수정 됨) * 컴파일 오류, B<void*> 개체 뒤에 B<int> 개체가 생성될 수 있지만 이전에 완료되면 컴파일 오류가 발생합니다.
템플릿 기능/클래스 작업의 결함:
( MT5(build 2368)에 의해 수정 됨) *** ( up ) 템플릿 함수 내부의 버그인 컴파일 오류, 명시적 캐스트 작업의 일부로 전달된 포인터는 포인터처럼 다른 경우에는 클래스처럼 작동합니다.
( MT5(build 2368)에 의해 수정 됨) ** ( up ) 템플릿 함수의 템플릿 매개변수에 대한 내부 클래스에 액세스하려고 할 때 발생하는 컴파일 오류, 버그.
(MT5(빌드 2368)로 수정되지 않음 ) *** 컴파일 오류, 부적절한 경고 출력에 대한 주요 불만은 "사용되지 않는 동작, 향후 MQL 컴파일러 버전에서 숨겨진 메소드 호출이 비활성화됩니다"입니다. 현재 구현은 참새에 대포 사격입니다.
( MT5(build 2368)에 의해 수정되지 않음 ) ** 컴파일 오류, 반환 값이 템플릿 함수 인수의 유형에 따라 매개 변수 유형이 지정된 템플릿 클래스 내부에 있는 내부 클래스인 경우 버그가 템플릿 함수의 반환 값에 영향을 미칩니다. .
(MT5(build 2368)에서 수정되지 않음 ) ** 상속 및 내부 클래스에서 동일한 클래스 이름을 사용하는 경우 기본 클래스를 호출할 때 템플릿 생성자의 네임스페이스 및 범위와 관련된 컴파일 오류, 버그.
(MT5(빌드 2368)에 의해 수정되지 않음 ) * 컴파일 오류, 오버로드된 비 템플릿 함수에서 호출이 수행될 때 명시적 인수 유형으로 템플릿 함수를 호출할 때 발생하는 버그.
(MT5(빌드 2368)로 수정되지 않음 ) 컴파일 오류, 내부 클래스 정의 시 버그 - 기본 클래스를 지정할 때 전역 네임스페이스를 명시적으로 참조할 수 없습니다.
(MT5(빌드 2368)에 의해 수정 됨) ** 내부 클래스를 사용할 때 컴파일 오류, 템플릿 클래스 코드 생성 버그.
( MT5(build 2368)에 의해 수정 됨) * 컴파일 오류, 템플릿 메서드/클래스 생성 시 버그, 템플릿 매개변수의 "자동 교체" 프로세스가 범위를 넘어 메인 프로그램 코드로 넘어갑니다.
( MT5(build 2368)에 의해 수정 됨) * 템플릿 클래스가 템플릿 메서드의 반환 값으로 작동할 때 템플릿 클래스 코드가 자동으로 생성되지 않는 버그인 컴파일 오류.
( MT5(build 2368)에 의해 수정 됨) * 컴파일 오류, 템플릿 함수에 내부 구조체를 전달할 때 발생하는 버그, 결과 데이터 형식은 템플릿 클래스의 다른 내부 구조체에 대한 기본 데이터 형식으로 사용할 수 없습니다.
( MT5(빌드 2368)로 수정 ) * 템플릿 클래스 내에서 템플릿 함수를 선언할 때 재사용된 템플릿 유형 이름을 확인하지 않아 예기치 않은 동작이 발생하는 컴파일 오류.
(MT5(빌드 2368)에 의해 수정 됨) 컴파일 오류, 개체가 템플릿 클래스/구조체일 때 "제자리에서 생성된" 개체 반환과 관련된 많은 버그.
( MT5(build 2368)에 의해 수정되지 않음 ) * (버그가 아니라 기능입니다) 기본 클래스 생성자에서 명시적 유형 변환을 수행하여 기본 클래스 개체에 대한 포인터를 부모 클래스.
C++와 비교하여 MQL에서 오버로드된 함수 호출 우선순위의 불일치와 관련된 결함:
( MT5(build 2368)에 의해 수정 됨) ** ( up ) 컴파일 오류, 오버로드된 템플릿 함수에 대한 호출의 우선순위는 실제로 템플릿 매개변수의 유형에 따라 달라지며 이론상 컴파일 결과에 어떤 영향도 주어서는 안 됩니다.
( MT5(build 2368)에 의해 수정 됨) ** ( up ) 오버로드된 템플릿 함수 중 첫 번째가 완전히 특수화된 템플릿 기본 클래스를 사용하고 두 번째 템플릿이 비특수화된 템플릿 기본 클래스를 사용할 때 컴파일 오류가 발생합니다.
( MT5(빌드 2368)로 수정되지 않음 ) ** 컴파일 오류, 템플릿 함수 코드 생성 시 전달된 매개 변수에 적합한 서명을 가진 오버로드된 템플릿 함수가 있음에도 불구하고 컴파일 오류가 발생합니다.
(MT5(빌드 2368)에 의해 수정되지 않음 ) * 템플릿 매개변수의 수가 다른 오버로드된 템플릿 함수를 호출할 때 컴파일 오류, "오버로드된 함수에 대한 모호한 호출"이 발생합니다.
( MT5(빌드 2368)에 의해 수정 됨) *** 컴파일 오류, 클래스 A <= B <= C <= D의 상속이 있고 두 개의 오버로딩 기능이 구현되는 경우(예: 매개변수 A* 및 두 번째 B*를 사용하는 경우 MQL에서 C* 또는 D* 객체의 이러한 함수에 전달하면 "모호 오버로드된 함수 호출" 컴파일 오류가 발생합니다.
( MT5(빌드 2368)에 의해 수정 됨) ** 런타임, 오버로드된 템플릿 함수 호출에 대한 우선 순위 불일치.
기능의 느린 실행과 관련된 결함, 코드 최적화 프로그램의 작업:
( MT5(빌드 2368)에 의해 수정 됨) ** 런타임, ArrayResize를 사용하여 하나의 요소를 배열에 추가할 때 큰 오버헤드가 발생합니다. 예를 들어 최대 7배 느린 구조의 경우 해당 메모리가 미리 예약되어 있음에도 불구하고.
제안:
(신규) 링크 - 클래스의 정적 메서드에 대한 Intellisense 작업을 기반으로 하는 네임스페이스 기능에 대한 Intellisense 지원 구현에 대해 설명합니다.
링크 - 리터럴 및 임시 변수를 const ref 함수 인수로 전달하는 기능 제공에 대해.
링크 - "프로젝트" 탭에서 프로젝트 파일을 이동할 때 열려 있고 ME 탭에 있는 파일을 이동하려면 위치 경로를 자동으로 업데이트합니다.
링크 - MQL typedef 선언에 기능을 도입해야 할 필요성에 대해.
링크 - 기본 복사 생성자 및 할당 연산자 생성을 강제하는 기능 제공에 대해.
이전에는 모든 것이 제대로 작동했으며 분명히 다른 결함을 수정하는 과정에서 문제가 발생했습니다.
기본 클래스의 명시적 표시를 통해 할당 연산자를 호출할 때 MT5 버그(빌드 2368) 컴파일 오류가 발생 했습니다. 템플릿 매개변수가 기본 클래스인 템플릿 클래스에 대해 문제가 나타납니다.
이전에는 모든 것이 제대로 작동했으며 분명히 다른 결함을 수정하는 과정에서 문제가 발생했습니다.
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
오류, 버그, 질문
fxsaber , 2020.03.22 10:04
mq5 - 정상. mq4 - 고장났습니다. 여기에서 TypeToBytes_ExampleScript.mq4를 가져올 수 있습니다. 확장자가 mq5로 변경된 경우에만 컴파일됩니다.
2368 - 아무것도 변경되지 않았습니다.
하나의 MT5 터미널을 통해 나는 항상 모든 브로커의 계정에 로그인할 수 있었습니다. 첫 번째 항목에 문제가 있는 경우 터미널을 사용하여 적절한 브로커를 검색하기만 하면 자동으로 거래 서버에서 데이터를 수신합니다. 그 후에는 문제 없이 즉시 로그인할 수 있었습니다.
오늘 처음으로 아무것도 도움이되지 않는 상황 (새로운 브로커)에 직면했습니다. 들어오지마 로그에 씁니다.
브로커의 기본 터미널을 다운로드합니다. 그리고 내 연구 터미널 - 모든. 이런 건 처음이야.
네이티브가 아닌 터미널이 거래 계정에 연결할 수 있도록 만드는 방법을 알려주십시오.
네이티브가 아닌 터미널이 거래 계정에 연결할 수 있도록 만드는 방법을 알려주십시오.
MT4에서는 거래 서버가 검색되지 않도록 server.ini 서버 파일을 다른 터미널에 복사해야 했습니다.
나는 mt5에 대해 모른다