C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[55812] Re:템플릿 함수 이용시 에러요....
김태선 [cppbuilder] 991 읽음    2009-01-15 23:48
이용태 님이 쓰신 글 :
: 템플릿을 이용하여 함수를 만들었는데요..
:
: 함수는 다음과 같습니다..
:
: 근데.. 컴파일 해보니까... 다음과 같은 에러가 생깁니다.
:
: "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);
식이라면 위와 같은 에러가 나오게 됩니다.

템플릿은 말 그대로 템플릿일 뿐이니, 이를 의도하는 실제 객체형을 대입해서
확장해서 잘 생각해야 합니다.

+ -

관련 글 리스트
55809 템플릿 함수 이용시 에러요.... 이용태 1031 2009/01/15
55812     Re:템플릿 함수 이용시 에러요.... 김태선 991 2009/01/15
55813         Re:Re:템플릿 함수 이용시 에러요.... 이용태 941 2009/01/16
55815             Re:Re:Re:템플릿 함수 이용시 에러요.... 김태선 1013 2009/01/16
55814             Re:Re:Re:템플릿 함수 이용시 에러요.... 초보대왕 1082 2009/01/16
55810     Re:템플릿 함수 이용시 에러요.... 김동욱 1032 2009/01/15
55811         Re:Re:템플릿 함수 이용시 에러요.... 이용태 923 2009/01/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.