클래스 템플릿의 부분특수화로 객체를 선언하면 실행시 오류가 발생합니다.
글쓴이: 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 초기화하세요.
아, 포인터 문제였네요. 초기화가 잘못돼서 발생한 문제였군요.. 해결했습니다.
냉무에요...(내용은 없다........)
본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.
댓글 달기