이중포인터로 클래스를 구현하는게...
CStudentInfo
class CStudentInfo
{
~~학생정보와 학생정보를 입력하는 메소드들
};
class Schoolroom
{
private:
CStudentInfo** c;
int roomNumber;
public:
Schoolroom();
void AddStudent(CStudentInfo** c,int);
~Schoolroom();
};
선언은 이렇게 했구요.
CStudentInfo.cpp
void Schoolroom::AddStudent(CStudentInfo** c,int t)
{
int z = 0;
for (int i = 0 ; i < t ; i++)
{
cout << "학생 수를 입력하세요." << endl;
cin >> z;
c[i] = new CStudentInfo[z];
}
}
이렇게 정의를 했습니다.
main에서
Schoolroom room;
int a;
cin >> a;
CStudentInfo** c = new CStudentInfo*[a];
room.AddStudent(c,a);
안됩니다..OTL
반을 나타내는 클래스 객체에 학생들의 객체들을 붙일려고 저렇게 하는건데.
그러니깐 c[반][학생수] 이렇게요.
굳이 저럴 필요가 없이 학생클래스에다가 반정보까지 넣어버리면 될 것 같은데
문제는 교수님이 저렇게 해오라고 해서요.
컴파일과정에서 에러가 나는게 아니라 도스창에서 에러메시지가 뜹니다.
흡사 메모리 잘못사용할때처럼요...아무래도
c[i] = new CStudentInfo[z];
에서 에러가 나는 것 같습니다..구조체에서는 잘 되었었는데...
약간이라도 힌트를 주시면 감사하겠습니다.
굳이 이중 포인터를 쓰셔야 하는 이유가 있나요?지금 상황에서 쓰면
굳이 이중 포인터를 쓰셔야 하는 이유가 있나요?
지금 상황에서 쓰면 오히려 사용하기도 번거롭고, 난중에 고치기도 힘들듯한데
저같으면 vector를 쓰거나 vector<vector>를 쓰겠습니다.
높이 날다 떨어지면.
아푸다 ㅡ,.ㅡ
으흠..
저렇게 해오라서 하셔서..-0-
c[학급수][학생수]
이렇게 만드는게 목적인 것 같은데..
그래서
클래스명** 객체 = new 클래스명*[학급수]
for(학급수만큼 반복)
객체[학급수] = new 클래스명[학생수]
이렇게 해도 마찬가지더군요.
이게 분명히 구조체에서는 되었는데...-0-
void Schoolroom::AddStudent(CStudentInfo
void Schoolroom::AddStudent(CStudentInfo** c,int t) 에서
CStudentInfo의 2차원 배열까지는 잘 만들었습니다.
이 배열을 Schoolroom에 "Add" 하려면 어떻게 해야 할지 생각해 보세요.
힌트: Schoolroom::c 는 어디에 쓸 멤버일까요? :)
다른 문제: 소멸자, 복사생성자, 대입연산자는 어떻게 해야 할까요?
조금만 더 힌트를 주시면 안될까요?길이 보일락말락 하네요..^^;
조금만 더 힌트를 주시면 안될까요?
길이 보일락말락 하네요..^^;
지금은 Schoolroom::AddStudent()에서 배열만 만들고 끝
지금은 Schoolroom::AddStudent()에서 배열만 만들고 끝나게 되어 있습니다.
Schoolroom 개체와 그 배열과는 아무런 관련이 없는 상태죠. Schoolroom과
배열을 연결하려면? 어렵지 않습니다. 한 줄만 넣으면 됩니다.
아..그렇군요.드디어 해결을 할 수가 있게되었습니다.그리고 소멸자
아..그렇군요.
드디어 해결을 할 수가 있게되었습니다.
그리고 소멸자,복사생성자,대입연산자라는 문제덕분에 더 잘 짜여진 프로그램을 만들 수 있게 되었습니다.
정말 감사합니다.^^
즐거운 하루 되세요.
댓글 달기