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

 

심각한 경우가 있습니다. 사용할 수 있는 논리가 누락되었습니다.

이러한 입력이 있는 기능이 있습니다.

 int Tree_Calcf( int &arr_List_Buy[], int &arr_List_Sell[], int Vektor_ZZ, int Variant_Tree_Buy= 0 , int Variant_Tree_Sell= 0 )
{
int CalcBuy= 1 ;
int CalcSell= 1 ;
//Print("Rez_Tree_Calc=",Rez," - f"," Vektor_ZZ=",Vektor_ZZ," CalcSell=",CalcSell);

if (Vektor_ZZ== 1 )
{
if (Variant_Tree_Buy== 1 )
{
                         if (arr_List_Buy[ 272 ]< 0.5 && arr_List_Buy[ 100 ]< 0.5 && arr_List_Buy[ 249 ]< 0.5 && arr_List_Buy[ 147 ]< 0.5 && arr_List_Buy[ 350 ]< 0.5 && arr_List_Buy[ 383 ]< 0.5 && arr_List_Buy[ 463 ]< 0.5 && arr_List_Buy[ 250 ]< 0.5 && arr_List_Buy[ 283 ]< 0.5 && arr_List_Buy[ 204 ]< 0.5 && arr_List_Buy[ 499 ]< 0.5 && arr_List_Buy[ 296 ]< 0.5 && arr_List_Buy[ 486 ]< 0.5 && arr_List_Buy[ 209 ]< 0.5 && arr_List_Buy[ 453 ]< 0.5 && arr_List_Buy[ 333 ]< 0.5 && arr_List_Buy[ 137 ]< 0.5 && arr_List_Buy[ 127 ]< 0.5 && arr_List_Buy[ 191 ]< 0.5 && arr_List_Buy[ 395 ]< 0.5 && arr_List_Buy[ 224 ]< 0.5 && arr_List_Buy[ 432 ]< 0.5 && arr_List_Buy[ 378 ]< 0.5 && arr_List_Buy[ 25 ]< 0.5 && arr_List_Buy[ 441 ]< 0.5 && arr_List_Buy[ 2 ]< 0.5 && arr_List_Buy[ 465 ]< 0.5 && arr_List_Buy[ 231 ]< 0.5 && arr_List_Buy[ 482 ]< 0.5 && arr_List_Buy[ 324 ]< 0.5 ) CalcBuy= 0 ; //(0.83965634 0.16034366)
//--Вырезана часть аналогичного кода - листья дерева
}

//V03
if (Variant_Tree_Buy== 2 )
{
//---Вырезан код, он не активируется в момент ошибки}
//--Дерево на базе активации листьев без фильтров
if (Variant_Tree_Buy== 3 )
{
//---Вырезан код, он не активируется в момент ошибки}
}
//----TreeList_Sell
if (Vektor_ZZ==- 1 )
{
if (Variant_Tree_Sell== 1 )
{

                         if (arr_List_Sell[ 127 ]< 0.5 && arr_List_Sell[ 275 ]< 0.5 && arr_List_Sell[ 42 ]< 0.5 && arr_List_Sell[ 389 ]< 0.5 && arr_List_Sell[ 121 ]< 0.5 && arr_List_Sell[ 410 ]< 0.5 && arr_List_Sell[ 39 ]< 0.5 && arr_List_Sell[ 348 ]< 0.5 && arr_List_Sell[ 358 ]< 0.5 && arr_List_Sell[ 143 ]< 0.5 && arr_List_Sell[ 396 ]< 0.5 && arr_List_Sell[ 364 ]< 0.5 && arr_List_Sell[ 354 ]< 0.5 && arr_List_Sell[ 160 ]< 0.5 && arr_List_Sell[ 324 ]< 0.5 && arr_List_Sell[ 46 ]< 0.5 && arr_List_Sell[ 38 ]< 0.5 && arr_List_Sell[ 397 ]< 0.5 && arr_List_Sell[ 295 ]< 0.5 && arr_List_Sell[ 48 ]< 0.5 && arr_List_Sell[ 322 ]< 0.5 && arr_List_Sell[ 363 ]< 0.5 && arr_List_Sell[ 40 ]< 0.5 && arr_List_Sell[ 420 ]< 0.5 && arr_List_Sell[ 43 ]< 0.5 && arr_List_Sell[ 230 ]< 0.5 && arr_List_Sell[ 10 ]< 0.5 && arr_List_Sell[ 471 ]< 0.5 && arr_List_Sell[ 507 ]< 0.5 && arr_List_Sell[ 259 ]< 0.5 ) CalcSell= 0 ; //(0.78952321 0.21047679)





//--Вырезана часть аналогичного кода - листья дерева
} if (Variant_Tree_Sell== 2 ) { //---Вырезан код, он не активируется в момент ошибки } //--Дерево на базе активации листьев без фильтров if (Variant_Tree_Sell== 3 ) { //---Вырезан код, он не активируется в момент ошибки } } int Rez= 0 ; if (Vektor_ZZ== 1 )Rez=CalcBuy; if (Vektor_ZZ==- 1 )Rez=CalcSell; Print ( "Rez_Tree_Calc=" ,Rez, " - f" , " Vektor_ZZ=" ,Vektor_ZZ, " CalcSell=" ,CalcSell); return Rez; }

따라서 이 함수는 때때로 값 769를 제공합니다.

 2020.03 . 01 15 : 54 : 23.500 Core 1    2019.11 . 13 22 : 57 : 00    Rez_Tree_Calc= 769 - f Vektor_ZZ=- 1 CalcSell= 769

첫 번째 인쇄의 주석을 제거하면

 //Print("Rez_Tree_Calc=",Rez," - f"," Vektor_ZZ=",Vektor_ZZ," CalcSell=",CalcSell);

그러면 올바른 값이 반환됩니다.

함수가 잘려서 에러가 나는 시점 에 함수 가 호출될 때 활성화되지 않은 코드를 제거하는 것만으로도 에러가 나지 않습니다.

분명히 컴파일러 오류-전체 기능을 보낼 개발자, 그렇지 않으면 포럼에 적합하지 않습니다.

 
포럼이 코드의 형식을 왜곡하고 수정이 불가능합니다.
 
괄호를 추가하면 위의 문제 를 해결하는 데 놀라운 효과가 있음이 밝혀졌습니다.

 class A{};

template < typename T>
class B{
public :
   B( int &){}
   B( long ){}
   B( int , int , int ){};  
   B( const B&){}
   B( const A*){}
};

// template class type
B<A*> test_b_class_class(){
   B<A*> b( 1 );
   int x = 22 ;
   
   return ( B<A*>( 1 ) ) ;             // Fixed Compile Error: ambiguous call to overloaded function with the same parameters: "B(long)" and "B(const A*)"
   return ( B<A*>( 1 , 2 , 3 ) ) ;         // Fixed Compile Error: only one argument is acceptable, argument should be castable to int
   return ( B<A*>(x) ) ;             // Fixed Compile Error: argument is passed by value instead of by reference.
   return ( B<A*>((A*) NULL ) ) ;       // Fixed Compile Error: 'int' - invalid cast operation        
   return ( B<B<B< long >>>( 1 ) ) ;     // Fixed Compile Error: OK, template parameter type does not provide any effort on compilation result
   
   return b;
};

B<A*>* test_b_ptr_ptr(){
   B<A*> b( 1 );
   
   return & ( B<A*>( 1 ) ) ;             // Fixed Compile Error: '&' - illegal operation use
   return &b;                 
};


void OnStart (){    
   // template class type
   B<A*> b0 = test_b_class_class();
   B<A*>* b_ptr = test_b_ptr_ptr();
}
 
Sergey Dzyublik :
괄호를 추가하면 위의 문제 를 해결하는 데 놀라운 효과가 있음이 밝혀졌습니다.

그것이 내가 쓰는 유일한 방법입니다.

 
템플릿 함수의 반환 값에 대한 MT5 버그(빌드 2345) 컴파일 오류 , 반환 값이 템플릿 클래스 내부에 있는 내부 클래스인 경우 템플릿 함수 인수의 유형에 따라 매개변수 유형이 지정됩니다.

 template < typename T>
class A{
public :
   class B{
   public :
      B(){};
      B(B&){};
   };
   
   A(){};
   A(A&){}
};

class C{
public :
   class D{
   public :
      D(){}
      D(D&){}
   };
};


template < typename T>
A< int >::B* test_b_ptr( const T n){             //OK
   A<T>::B* ptr = new A< int >::B();
   return ptr;
}

template < typename T>
A< int >::B test_b_in_place_class( const T n){   //OK
   return (A<T>::B());
}

template < typename T>
A< int >::B* test_b_in_place_ptr( const T n){     //OK
   return &(A<T>::B());
}


template < typename T>
A<T> test_a_template( const T n){               //OK
   A<T> a;
   return a;
}

template < typename T>
C::D test_d( const T n){                       //OK
   C::D d;
   return d;
}

template < typename T>
A<T>::B test_b_template( const T n){          //'A' - unexpected token, probably type is missing? 
   A<T>::B b;
   return b;
}



void OnStart (){ 
   test_b_ptr( 1 );
   test_b_in_place_class( 1 );
   test_b_in_place_ptr( 1 );
   
   
   test_a_template( 1 );
   test_d( 1 );
   test_b_template( 1 );                       // Compile Error
}
 
// "MetaTrader 5\MQL5\Files\Reports\2020.03.01 03.43.46ExpertName (琼㹤⸱㠰㐹㰷琯㹤琼㹤⼼摴㰾摴ㄾ〮ㄹ㔷⼼摴㰾摴㈾㄰⸹㠰ㄮ‴㈰〺㨰〰ㄮ㐱⼼摴㰾摴ㄾ〮〹㐵⼼摴㰾摴㰾琯㹤琼㹤⼼摴㰾摴㰾琯㹤琼㹤㰰琯㹤琼㹤⼼摴㰾摴㰾琯㹤琼㹤⼼摴㰾摴 - )\"

터미널 로그에서 가져온 이 텍스트를 ME에 복사하고 커서를 줄 끝으로 이동한 다음 BackSpace 키를 사용하여 문자를 삭제해 보십시오. 재현 가능한 버그가 있습니다.

애니메이션에서 커서의 위치에 주의하십시오. BackSpace를 누르면 커서에서 멀리 떨어진 문자가 삭제됩니다.


ZY 메모장에서는 모든 것이 정상이고 ME에서는 - 아니요.

검색 문자열 : Uluchshenie 012.
 
fxsaber :

터미널 로그에서 가져온 이 텍스트를 ME에 복사하고 커서를 줄 끝으로 이동한 다음 BackSpace 키를 사용하여 문자를 삭제해 보십시오. 재현 가능한 버그가 있습니다.


ZY 메모장에서는 모든 것이 정상이고 ME에서는 - 아니요.

ME Win10-64에서 문제 없이 삭제됨

나는 모든 것을 복사 한 것 같습니다. 마지막 문자는 다음과 같습니다.

摴 - )\"

추신: ME에는 일종의 농담이 있습니다. 저는 각각 50Kb의 .mql4 / mql5 소스 파일을 가지고 있습니다. 포럼에서 동일한 코드는 사용자를 위해 5-6kB를 차지할 것입니다. 초점은 유니코드 인코딩에 있는 것 같습니다 - "아니 유니코드" - 논의된 위치가 이미 기억나지 않습니다.


UPD: ME 메뉴: 파일 - 다른 이름으로 저장 - 아래 인코딩, 기본적으로 유니코드가 있습니다.

 
Igor Makanu :

UPD: ME 메뉴: 파일 - 다른 이름으로 저장 - 아래 인코딩, 기본적으로 유니코드가 있습니다.

비슷하게.

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

오류, 버그, 질문

fxsaber , 2020.03.01 16:10

애니메이션에서 커서의 위치에 주의하십시오. BackSpace를 누르면 커서에서 멀리 떨어진 문자가 삭제됩니다.

 
fxsaber :

터미널 로그에서 가져온 이 텍스트를 ME에 복사하고 커서를 줄 끝으로 이동한 다음 BackSpace 키를 사용하여 문자를 삭제해 보십시오. 재현 가능한 버그가 있습니다.

애니메이션에서 커서의 위치에 주의하십시오. BackSpace를 누르면 커서에서 멀리 떨어진 문자가 삭제됩니다.


ZY 메모장에서는 모든 것이 정상이고 ME에서는 - 아니요.

검색 문자열 : Uluchshenie 012.

최근에 비슷한 버그가 있었습니다. 커서를 잃어버렸습니다. ME를 다시 시작했는데 다시 발생하지 않았습니다. 나는 Windows와 함께 뭔가를 생각했다
 
Vladislav Andruschenko :
ME를 다시 시작했는데 다시 발생하지 않았습니다.

재부팅은 도움이 되지 않습니다.