제가 간단히 테스트 해봤지만 컴파일러는 이상 없습니다.
: T == AiType == ViInt8 == unsigned char 인데요...
라고 하셨는데,
아마도 에러 메시지를 봐서는 실제로는 const 형인 것 같네요.
코드를 잘 추적해 보시기를...
이용태 님이 쓰신 글 :
: 일단 대문자 TYPENAME은 아니구요... 소문자 typename 이었습니다. C++ 에디터로 변환했더니 대문자로 자동 변환된거 같습니다.
:
:
: 우선 소스의 T는 AiType형으로 제가 define 문으로 재정의한 형입니다
:
: #define AiType ViInt8 // <-- ViInt8을 AiType으로 재정의 했습니다.
:
: ViInt8은 제가 사용하는 라이브러리에서 사용하는 형인데요... 라이브러리 헤더화일 뒤졌더니...
:
: ViInt8은 signed char 로 정의되어 있습니다.
:
: 이것을 풀어쓰면..
:
: T == AiType == ViInt8 == unsigned char 인데요...
:
: 즉 김태선님이 말씀하신대로 T는 일반 변수형이므로 에러가 발생하지 말아야 하는거 아닌지요?
:
: T를 일반 변수형으로 직접 대체해버리면 이상없이 컴파일됩니다..
:
: void CalPeakData(T* pData, int *peakPos, int *peakVal)
: {
: int max = 0;
: int max_index;
:
: int min = 0;
: int min_index;
:
: //어쩌구 저쩌구...
:
: max = pData[i];
: max_index = i;
:
: *peakVal = max;
: *peakPos = i;
: }
:
: 이거 왜 그런건지 잘 모르겠습니다...
:
: 무엇이 문제일까요??
:
:
:
: 김태선 님이 쓰신 글 :
: : 이용태 님이 쓰신 글 :
: : : 템플릿을 이용하여 함수를 만들었는데요..
: : :
: : : 함수는 다음과 같습니다..
: : :
: : : 근데.. 컴파일 해보니까... 다음과 같은 에러가 생깁니다.
: : :
: : : "Cannot modify a const object."
: : :
: : : 이거 왜 그런건가요? 그냥 값 잘 대입되어야 하는거 아닌지요?
: : :
: : :
: : :
: : : template
: : : void CalPeakData(T* pData, int *peakPos, T *peakVal)
: : : {
: : : T max = 0; //<-- cannot modify a const object
: : : int max_index;
: : :
: : : T min = 0; //<-- cannot modify a const object
: : : int min_index;
: : :
: : : //어쩌구 저쩌구...
: : :
: : : max = pData[i]; //<-- cannot modify a const object
: : : max_index = i;
: : :
: : : *peakVal = max; //<-- cannot modify a const object
: : : *peakPos = i;
: : : }
: : :
: :
: : typename 은 소문자로 쓰셔야 하고
: : 그이
: : 템플릿 함수는 그다지 이상은 없습니다.
: : 하지만
: : : T max = 0; //<-- cannot modify a const object
: : 가 먹으려면
: : T 는 인스턴스가 0으로 초기화 될수 있는 성격의 것이어야 합니다.
: : 그러닌까 int byte double 등 일상적인 형은 무방하나
: : 만일 T가 클래스인 경우 그 클래스 0을 생성자로 받아 들일 수 있는 형태가 아니면
: : 에러가 발생합니다.
: : 에러 형태가 cannot modify a const object 인 것으로 봐서는
: : 0을 받아 들일 수 있는 형태의 객체가 아닌 것 같네요.
: :
: : 일반적인 변수형이라도
: : const 형인 경우는 위와 같은 에러가 나옵니다.
: : 가령
: : CalPeakData<const int>(&const_int, &int, &int);
: : 식이라면 위와 같은 에러가 나오게 됩니다.
: :
: : 템플릿은 말 그대로 템플릿일 뿐이니, 이를 의도하는 실제 객체형을 대입해서
: : 확장해서 잘 생각해야 합니다.