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

 
Комбинатор :
프로에서 컴파일하고 실행하면 괜찮아)

나는 당신이 여기에서 무엇을 좋아하지 않는지 이해하지 못합니다. 모든 것이 작동합니다.

 template < typename T>
void f() { }

template <>
void f< int >() { }

int _tmain( int argc, _TCHAR* argv[])
{
  f< double >();
  f< int >();

   return 0 ;
}
 
Alexey Navoykov :

나는 당신이 여기에서 무엇을 좋아하지 않는지 이해하지 못합니다. 모든 것이 작동합니다.

알았어, 난 바보야
 

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

A100 , 2017.08.17 18:45

 template < typename T>
int xxx::value = - 1 ;

예, 저는 이미 이것을 발견했습니다. 그러나 문제는 소스에서 이 멤버가 실제로 배열이고 단순성을 위해 먼저 스칼라를 다루기로 결정했다는 것입니다. 그러나 어레이의 경우 유사한 기술이 작동하지 않습니다. 멤버 함수 내에서 정적으로 배열을 끌어야 했습니다.

 
Stanislav Korotky :

그러나 어레이의 경우 유사한 기술이 작동하지 않습니다. 멤버 함수 내부에 static이 있는 배열을 끌어야 했습니다.

이것은 이미 컴파일러 오류입니다. 서비스 데스크에 보고해야 합니다.

 template < typename T>
struct A {
         static int i[];
};
template < typename T>
int A::i[]; //error: '[' - unexpected token
 

빌드 1650. 관련된 .ex5 모듈(메인 및 라이브러리)이 여러 개 있으면 아무 것도 작동 하지 않습니다. 모든 곳에서 형식 오류:

2017.08.18 01:49:59.759 추첨 (USDJPY,H1) 'yyy.ex5'에서 'xxx'를 찾을 수 없습니다

이전에는 모든 것이 잘 작동했습니다. 지금도 MetaEditor 1646 + MetaTrader 1650을 컴파일하면 모든 것이 작동합니다.

분명히 MetaEditor 1650의 버그이지만 .ex5 파일의 크기는 거의 절반으로 줄었습니다. 왜 그런 실험을 합니까?

 

나는 코드를 추가

 //Test.mqh
class A {};
class B { public :
        B() { f(); }
        A *g() { return NULL ; }
void f()
{
         void *x = g();
         if ( true )
                 return ; 
         delete x; //в build 1650 не работает даже если до delete никогда (!) не доходит
                   //а ошибка при выполнении возникает именно из-за наличия этой строки
                   //и указатель в исходном коде действительный (есть проверка)
}
};

//Test.mq5
#include "Test.mqh"
#import "Test2.ex5"
        A *f();
#import
void OnStart ()
{
        f();
}
//Test2.mq5
#property library
#include "Test.mqh"
static B b;
A *f() export { return NULL ; }

결과는 이전 포스트에 있습니다.

 
확인할 또 다른 예
 //Test.mq5
class A;
#import "Test2.ex5"
        A *f();
        void g( A* );
#import
void OnStart () //вариант 1
{
        f(); /*возвращаемое значение не используется*/
}
 //Test2.mq5
#property library
class A {};
static A *a;
A *f()       export { /*делает что-то полезное*/ ; return a; }

void g( A* ) export { /*делает что-то полезное*/; }

도서관은 일반적입니다. 전달할 때, 이 특별한 경우에 f()에 의해 반환된 포인터는 더 이상 사용되지 않습니다 - 옵션 1(하지만 사용할 수 있음 - 아래 옵션 2 참조). Test.mq5를 컴파일할 때 오류 메시지 가 표시되지 않습니다. 즉, 컴파일러에서 클래스(A)를 정의할 필요가 없습니다. 그러나 실행할 때 오류는 'Test2.ex5'에서 'f'를 찾을 수 없습니다.

더 나아가

 void OnStart () //вариант 2
{
        g( f()/*возвращаемое значение используется*/);
}
 
테스트 결과 에서 최대 드로다운이 아니라 상대적인 드로다운을 수단으로 설정할 수 있다고 말해 주십시오. 그리고 나서 최대값은 종종 3-5%이고 상대값은 50%에 이릅니다. 그리고 상대적인 드로다운을 보려면 테스트를 별도로 실행해야 합니다. 미리 감사드립니다
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии ( советники ) перед началом использования их в реальной торговле. При...
 
 
Vladimir Pastushak :

윈도우 언어를 바꿔야 행복하다...