이 프로그램은 Period::display()
에 value->getSmall
을 실행할 때 잘되지만 오류를 컴파일합니다. 저는 g ++로 리눅스에서 일하고 있습니다. T
으로 사용할 수있는 모든 클래스에 대해 getSmall
함수를 제공했습니다. 그냥 디버그 라인을 추가하고 segfault가 값의 유형 즉 T
이 Class * 일 때 발생한다는 것을 알았습니다. 템플리트 화 된 컨텍스트에서 독립적 인 값을 호출하는 것과 같은 몇 가지 문제점을 언급 한 몇 가지 FAQ를 보았습니다. 그러나이를 해결하는 방법은 알 수 없습니다.템플릿 멤버의 멤버 함수 호출
using namespace std;
template <class T> //T is the class which has to be related & referenced to by period
class Period
{
T value;
public:
void display()
{
cout<<setw(5)<<"| "<< value->getSmall() << "|";
size_t len; //for debug
int s; //for debug
char* p=abi::__cxa_demangle(typeid(value).name(), 0, &len, &s); //for debug
cout<<setw(5)<<"| "<< p << "|"; //for debug
}
};
class Class
{
string name;
timeTable<Teacher*> tt; //class timetable contains pointers to teachers
vector<Teacher::teachTimePerClass> teachers; //set of all teachers teaching in a Class with corresponding total time
//assigns a teacher to a period in a day
bool assign(dayNames day,int periodNum,Teacher *teacher)
{
tt.assign(day,periodNum,teacher); //assign the value in this Class's timetable
teacher->assign(day,periodNum,this); //update the teacher's timeTable
}
public:
static vector<Class*> Classes; //dont forget to destory it at the end!!
string getSmall()
{
return name;
}
};
vector<Class*> Class::Classes;
1. 왜 포인터를 사용하고 있습니까? 2. segfaults 코드는 어디에 있습니까? –
현재 왜 display()가 segfault를해야하는지 알 수 없습니다. 컴파일러가 이것에 대해 경고해야합니다. – pmr
@Cat Plus Plus 1) 많은 클래스의 기본 목록이 벡터로 유지됩니다. 이 기간은 특정 클래스에 '연결'되어 있으므로 포인터를 사용할 수도 있습니다. 대신에 무엇을 권하고 싶습니까? 2) value-> getSmall() 부분을 주석 처리하면 segfault가 발생하지 않습니다. –