클래스 템플릿의 부분특수화로 객체를 선언하면 실행시 오류가 발생합니다.
글쓴이: dltkddyd / 작성시간: 금, 2013/05/10 - 5:15오후
클래스의 특수화에 대한 아래 소스 컴파일은 잘 됩니다. 그런데 부분특수화 때문에 실행시 디버거가 계속 뜨는데 문제가 뭔지 아시는 분은 좀 알려주세요.
#include <cstdio> #include <cstring> #include <iostream> using namespace std; template<class targ_first, class targ_second > class SomeC { public: targ_first x,y; targ_second* msg; SomeC() { printf("SomeC()\n"); } void setXY(targ_first x, targ_first y) { this->x=x; this->y=y; } targ_first getX() { return x; } targ_first getY() { return y; } void setMsg(const targ_second* msg) { unsigned len=strlen(msg); this->msg=new targ_second[len+1]; (this->msg)[len]=0; for(unsigned i=0;i<len;i++) { (this->msg)[i]=msg[i]; } } targ_second* getMsg() { return this->msg; } ~SomeC() { if(this->msg!=NULL) { delete[] (this->msg); } } }; template<> class SomeC<char,char> {//전체 특수화 public: char x,y; char* mm; SomeC() { printf("In SomeC<char,char>\n"); } void setXY(char x, char y) { this->x=x; this->y=y; } void setMM(const char* mm) { unsigned len=strlen(mm); this->mm=new char[len+1]; (this->mm)[len]=0; for(unsigned i=0;i<len;i++) { (this->mm)[i]=mm[i]; } } ~SomeC() { delete[] (this->mm); } }; template<class targ> class SomeC<char, targ> {//부분 특수화 public: char x,y; targ* nonchararr; unsigned length; SomeC() { printf("In SomeC<char,targ>\n"); } void setXY(char x, char y) { this->x=x; this->y=y; } void setNonchararr(targ* nonchararr,unsigned len) { this->nonchararr=new char[len];; for(unsigned i=0;i<len;i++) { (this->nonchararr)[i]=nonchararr[i]; } length=len; } void output() { for(unsigned i=0;i<length;i++) { cout<<nonchararr[i]<<endl; } } ~SomeC() { delete[] (this->nonchararr); } }; int main() { SomeC<int,char> ab; ab.setXY(10,20); ab.setMsg("Note"); printf("(%d,%d), %s\n",ab.getX(),ab.getY(),ab.getMsg()); SomeC<char,char> ac; ac.setXY('h','j'); ac.setMM("setMM"); printf("(%c,%c), %s\n",ac.x,ac.y,ac.mm); //printf("(%c,%c)\n",ac.getX(),ac.getY()); SomeC<char,int> ad; /*ad.setXY('l','m');*/ return 0; }
Forums:
main의 SomeC<char,int> ad에서 문제가 발생하눈군요. 해결좀 부탁.. 저도 지금 찾고 있는 중입
냉무(내용은 없다.....)
본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.
nonchararr 초기화하세요.
nonchararr 초기화하세요.
아, 포인터 문제였네요. 초기화가 잘못돼서 발생한 문제였군요.. 해결했습니다.
냉무에요...(내용은 없다........)
본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.
댓글 달기