[전연변수와 지역변수]
TForm1 class에 선언된 변수라면
그건 전역변수가 아닙니다.
그건 TForm1 class의 멤버 변수 입니다.
만약에
TForm1 *fm1=new TForm1(NULL);
TForm1 *fm2=new TForm1(NULL);
위와같이 TForm1 을 두개 생성했다면
int a,b 도 fm1 과 fm2에 따로 있게 되는거죠
[ Form1 에 대해]
그리고 Form1 에 대해
TForm1은 class 입니다. class는 설계도죠
설계도를 가지고 물건을 만들었습니다.
그것을 Form1 이라는 변수에 넣어두면 Form1으로 접근할수 잇는것이지
Form1으로 접근하면 무조근 되는게 아닙니다.
TForm1 *fm1=new TForm1(NULL); 이처럼 TForm1을 생성했다면
이 폼의 int a에 접근하려면 fm1->a 이렇게 해야겠죠?
그런데 Form1으로 접근해도 에러 나지 않는 이유는?
Project1.cpp 같은 project 파일을 보시면 알수 있습니다.
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1); // 여기서 TForm1을 새성해서 Form1변수에 할당함
Application->Run();
Application->CreateForm ... 에서 해주는것입니다.
만약
1. 폼을 자동으로 생성하지 않았거나
2. 자동생성한게 있더라도 또다른 TForm1을 생성했거나
등등...
의 이유로 잘못된 접근이 일어날수 있죠
[전연변수는?]
Form1 같은게 전연 변수 입니다.
Unit1.h 에 보시면 extern으로 선언되어 있습니다.
extern PACKAGE TForm1 *Form1;
실제 선언은 Unit1.cpp 에 보시면 나와있죠?
TForm1 *Form1;
님께서 unit1에 전역 변수를 선언해 사용하고 싶다면
Form1처럼 하는 방법이 있습니다.
Unit1.h 에는 class 멤버가 아니고
Form1 선언된 그위치 즈음에
extern int a,b; 이렇게 선언하시구
Unit1.cpp 에
int a,b 이렇게 선언해서 쓰시면 됩니다.
[멤버변수]
int a,b를 TForm1의 멤버변수로 해서 쓰려면?
변수 선언에는 문제없습니다
그런데 참조한 Form1이 엉뚱한 놈이라서 그런것 같습니다.
그럼..
윤성중 님이 쓰신 글 :
: 예를 들어서
: Form1에 전역 변수로 int a,b 라는 변수를 설정했습니다.
: 그리고 Form2에서 a 값에 따라서 b라는 변수에 값을 각각 다른 값을 입력하고 싶습니다.
: 그런데 Form1 에 있는 a 값을 가져 올수가 없습니다.
: 아래와 같이 프로그램을 만들었습니다.
:
: Fomr1의 헤더 파일에
: public:
: int a, b;
:
: 에 위와 같이 변수 할당을 하고
: Form2 에서
: switch *Form1->a){
:
: case 1:
: b=2;
: case 2:
: c=4:
: }
: 위와같이 설정했는데 a값이 0으로만 계속 읽혀 집니다.
: 뭐가 잘못 됐나요? 답변 부탁드립니다.