|
비기너 님이 쓰신 글 :
: Run하고 Add Watch로 보면 Undefined symbol 'listArray'라고 나오고 구조체가 작동을 안합니다.
:
: 이유가 뭔지 정말 궁금합니다.
:
:
: STRUCTUR_H (Header File)
:
: #ifndef _STRUCTUR_H
: #define _STRUCTUR.H
: struct mailingListRecord // 구조체 선언
: {
: char Name[20];
: char Score1[20];
: char Score2[20];
: char Score3[20];
: char Score4[20];
: };
: #endif
:
: Unit1.cpp (Source File)
:
: #include "STRUCTUR.H"
:
: #include <math.h>
: #include <math.hpp>
: #include <stdio.h>
: #include <stdlib.h>
: #include <io.h>
: #include "fstream.h"
: #include <iostream.h>
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
: char *fp;
: int i, j, k;
: int Num_Student, Num_Class;
: Num_Student = 0;
: Num_Class = 0;
:
: if(OpenDialog1->Execute())
: fp=OpenDialog1->FileName.c_str();
:
: ifstream fin1;
: fin1.open(fp);
:
: if(fin1.is_open())
: {
: fin1>>Num_Student;
: fin1>>Num_Class;
:
: mailingListRecord *listArray[12]; // mailingListRecord *listArray[Num_Student+1] 로 하니, 상수로 하라고 해야한다고 컴파일 에러 뜨는데, 동적 할당 안되는지도 궁금합니다.
:
: for(i=0;i<Num_Student+1;i++)
: listArray[i] = new mailingListRecord;
:
: for(i=0;i<Num_Student+1;i++)
: {
: fin1.getline(listArray[i]->Name, sizeof(listArray[i]->Name)-1);
: fin1.getline(listArray[i]->Score1, sizeof(listArray[i]->Score1)-1);
: fin1.getline(listArray[i]->Score2, sizeof(listArray[i]->Score2)-1);
: fin1.getline(listArray[i]->Score3, sizeof(listArray[i]->Score3)-1);
: fin1.getline(listArray[i]->Score4, sizeof(listArray[i]->Score4)-1);
: }
: }
: }
질문 요약 : mailingListRecord *listArray[Num_Student+1] 로 하니, 상수로 하라고 해야한다고 컴파일 에러 뜨는데, 동적 할당 안되는지도 궁금합니다.
C 언어 문법책에 배열부분 참고하시면 쉽게 이해 되실겁니다.
포인터 배열을 쓰실려고 했는데, 가변적으로 사용하고 싶으신게 목적이라면,
정적인 배열에 쓰시면 당연히 안됩니다.
밑에 글에 보시면 " [60631] 문자열의 동적배열 입력 " 이 질문도 같은 질문이죠 결국..
왜 다들 배열을 동적으로 쓸려고 할까요?
배열은 정적인 공간입니다.
크기를 정해놓고 쓰셔야 합니다.
|