이중포인터로 클래스를 구현하는게...

시렌의 이미지

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-

doldori의 이미지

void Schoolroom::AddStudent(CStudentInfo** c,int t) 에서
CStudentInfo의 2차원 배열까지는 잘 만들었습니다.
이 배열을 Schoolroom에 "Add" 하려면 어떻게 해야 할지 생각해 보세요.

힌트: Schoolroom::c 는 어디에 쓸 멤버일까요? :)

다른 문제: 소멸자, 복사생성자, 대입연산자는 어떻게 해야 할까요?

시렌의 이미지

조금만 더 힌트를 주시면 안될까요?
길이 보일락말락 하네요..^^;

doldori의 이미지

지금은 Schoolroom::AddStudent()에서 배열만 만들고 끝나게 되어 있습니다.
Schoolroom 개체와 그 배열과는 아무런 관련이 없는 상태죠. Schoolroom과
배열을 연결하려면? 어렵지 않습니다. 한 줄만 넣으면 됩니다.

시렌의 이미지

아..그렇군요.
드디어 해결을 할 수가 있게되었습니다.
그리고 소멸자,복사생성자,대입연산자라는 문제덕분에 더 잘 짜여진 프로그램을 만들 수 있게 되었습니다.
정말 감사합니다.^^
즐거운 하루 되세요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.