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

 
template < typename T>
int CMapManager::IncreaseArraySize( T &array[] )
{

}

이 코드는 함수가 값을 반환해야 한다는 오류와 함께 컴파일되어야 하지 않습니까?

 
Alexey Kozitsyn :

이 코드는 함수가 값을 반환해야 한다는 오류와 함께 컴파일되어야 하지 않습니까?

~해야 한다

이 방법을 참조하지 않았고 컴파일러가 실행 파일에 이 코드 조각을 포함하지 않았을 가능성이 큽니다.

 
Igor Makanu :

~해야 한다

이 방법을 참조하지 않았고 컴파일러가 실행 파일에 이 코드 조각을 포함하지 않았을 가능성이 큽니다.

하지만 같은 클래스에서 Test() 함수를 정의하고 다음과 같이 구현하면:

 int CMapManager::Test()
{
        
}

이 기능을 어디에서도 언급하지 않았지만 오류가 발생합니다.

 
Alexey Kozitsyn :

하지만 같은 클래스에서 Test() 함수를 정의하고 다음과 같이 구현하면:

이 기능을 어디에서도 언급하지 않았지만 오류가 발생합니다.

이 메서드는 템플릿이 아니기 때문에 템플릿이 없습니다.

실제로 템플릿은 함수 호출( 클래스 메서드 )을 감지할 때 컴파일러가 필요한 유형을 대체하는 매크로 대체입니다.

이러한 "대체" 기능을 사용하면 특정 데이터 유형이 "생성"됩니다.

이것이 작동하는 방식입니다

 
Igor Makanu :

이 메서드는 템플릿이 아니기 때문에 템플릿이 없습니다.

실제로 템플릿은 함수 호출( 클래스 메서드 )을 감지할 때 컴파일러가 필요한 유형을 대체하는 매크로 대체입니다.

이러한 "대체" 기능을 사용하면 특정 데이터 유형이 "생성"됩니다.

이것이 작동하는 방식입니다

대충 상상이 되네요 감사합니다. 그러나 질문은 다릅니다. "생성 전" 단계에서 int 값이 반환되어야 한다고 보고되지 않는 이유는 무엇입니까?

결국 생성된 함수에 관계없이 모두 int 값을 반환합니다.

 
Alexey Kozitsyn :

대충 상상이 되네요 감사합니다. 그러나 질문은 다릅니다. "생성 전" 단계에서 int 값이 반환되어야 한다고 보고되지 않는 이유는 무엇입니까?

결국 생성된 함수에 관계없이 모두 int 값을 반환합니다.

우리는 두 번째 실행에 갔다 - 우리는 같은 대답으로 같은 질문에 대답할 것입니다)))

전화 없음 - 템플릿 응용 프로그램 없음, 그게 다야 - 작동 방식 - 그게 다야

)))

스크립트를 작성하고 확인

이와 같이:

 template < typename T>
T add(T a, T b)
{
   // return(a+b);
}
//+------------------------------------------------------------------+
void OnStart ()
{
   Print ( "start" );
   // Print(add(1.0 , 2.0));

}

이렇게 컴파일한 다음 주석을 엽니다. 오류가 있습니다.

 

나는 어딘가에서 뭔가를 놓쳤습니다. 일반적으로 이 코드에서 캐치를 찾고 있습니다.

 struct SMatrix
{
   SMatrix(){}
   SMatrix( int rows, int cols){ ArrayResize ( this .ROW,rows); for ( int i= 0 ;i<rows; i++) ArrayResize ( this .ROW[i].COL,cols); }
   struct SRow{ float COL[];};
   SRow ROW[];
};

//+------------------------------------------------------------------+
void OnStart ()
{
   SMatrix matrixA( 10 , 2 );
   int count = 0 ;
   for ( int i = 0 ;i< 10 ;i++)
   {
       for ( int j= 0 ;j< 2 ;j++) matrixA.ROW[i].COL[j] = ( float )count++; 
   }
   
   SMatrix matrixB = matrixA;
   for ( int i= 0 ;i< 10 ;i++)
   {
       ArrayPrint (matrixB.ROW[i].COL);
   }
}

2020.04.12 01:40:16.652 tst (EURUSD,H1) 0.00000 1.00000

2020.04.12 01:40:16.652 tst (EURUSD,H1) 2.00000 3.00000

2020.04.12 01:40:16.652 tst (EURUSD,H1) 4.00000 5.00000

2020.04.12 01:40:16.652 tst (EURUSD,H1) 6.00000 7.00000

2020.04.12 01:40:16.652 tst (EURUSD,H1) 8.00000 9.00000

2020.04.12 01:40:16.652 tst (EURUSD,H1) 10.00000 11.00000

2020.04.12 01:40:16.652 tst (EURUSD,H1) 12.00000 13.00000

2020.04.12 01:40:16.652 tst (EURUSD,H1) 14.00000 15.00000

2020.04.12 01:40:16.652 tst (EURUSD,H1) 16.00000 17.00000

2020.04.12 01:40:16.652 tst (EURUSD,H1) 18.00000 19.00000


복사 생성자 설명 없이 2차원 배열과 할당을 만드는 것이 너무 쉽다는 것이 당황스럽습니다.

내 코드에서 무엇이 잘못 작동할 수 있습니까?

 

디컴파일 금지!

 

만일을 대비하여 StringToCharArray 함수가 변환 없이 바이트를 복사하도록 하는 방법이 있습니까? 모든 CP_XXX를 시도했지만 일반적으로 "1:1" 사본을 제공하는 것은 없습니다. 다음은 예입니다.

 void OnStart ()
{
   uchar buffer[];
   string data = " test" ;
   StringSetCharacter (data, 0 , 0x81 ); // just an example, can be obtained in other ways
   StringToCharArray (data, buffer);
   // buffer[0] = (uchar)data[0];     // correct/direct copy
   ArrayPrint (buffer);
}

0x81 바이트를 가져오는 방법은 다를 수 있습니다. 여기서는 단순성을 위해 "이마에"로 설정합니다. 수동 바이트 단위 복사를 사용하지 않는 경우(주석 처리된 행에서와 같이) StringToCharArray 함수는 바이트 129(0x81)를 63으로 변환합니다.

지금까지 StringToCharArray를 루프로 교체해야 했지만 비밀 CP_XXX가 있을 수 있습니까?

 
Stanislav Korotky :

만일을 대비하여 StringToCharArray 함수가 변환 없이 바이트를 복사하도록 하는 방법이 있습니까? 모든 CP_XXX를 시도했지만 일반적으로 "1:1" 사본을 제공하는 것은 없습니다. 다음은 예입니다.

0x81 바이트를 가져오는 방법은 다를 수 있습니다. 여기서는 단순성을 위해 "이마에"로 설정합니다. 수동 바이트 단위 복사를 사용하지 않는 경우(주석 처리된 행에서와 같이) StringToCharArray 함수는 바이트 129(0x81)를 63으로 변환합니다.

지금까지 StringToCharArray를 루프로 교체해야 했지만 비밀 CP_XXX가 있을 수 있습니까?

 void OnStart ()
{
   uchar buffer[];
   string data = CharToString ( 0x81 ) + " test" ;
   StringToCharArray (data, buffer, 0 , StringLen (data));
   ArrayPrint (buffer);
}

2020.04.12 15:57:37.812 tst1 (EURUSD,H1) 129 32 116 101 115 116