C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[8858] Re:[질문]새로운 폼과 전역변수와 관련해서 <- C++ 문법의 오류라 생각됩니다.
김민호 [xho95] 1161 읽음    2001-07-09 11:09
안녕하세요...

아마도 질문하신 내용은 extern을 잘못 사용한 경우라 생각됩니다.
extern의 경우 extern의 대상이 되는 내용이 현재 파일이 아닌 다른곳에 정의되어 있다는 것을 알려주는 역할을 합니다. 즉, 실제 정의되어 있는 곳과 같은 곳에 extern을 쓰면 안됩니다.

보통의 경우 메모리의 할당(이것이 정의아닙니까?)은 헤더 파일이 아니라 그에 해당하는 cpp 파일에다가 해주게 됩니다. 그러니까 실제 변수의 정의는 cpp 파일에다가 하고 헤더 파일에는 extern을 해주면 됩니다.

메인.cpp ;

#include 메인.h
#include 새로운 폼.h

문제의 전역변수 = new 새자료형;     // 여기에 실제 정의를 해줍니다.

메인.h ;

typedef struct
{
   ...
} 새자료형;

extern 새자료형 *문제의전역변수;    // 이건 단지 메인.cpp 에 정의할 꺼라고 알려주는 역할...

이렇게 한다음... Form2 에서 전역변수를 사용하고 싶으면 Form2 의 소스 파일에다가 "메인.h"을 include 해 주면 됩니다. 아래 처럼요...

다른.cpp ;

#include 메인.h

저의 경우에는 분명히 되었는데, 혹시 이상이 있으시면, 남겨주세요...
그럼... 수고하세요...

허접이 님이 쓰신 글 :
: 새로운 폼을 띄우면 구조체의 포인터로 선언했던 전역변수가
: 제멋대로 NULL의 값을 가집니다. 웃기는 것은 그 전역 포인터가
: 새 폼을 닫고 컨트롤이 메인 폼으로 넘어오면 또 메인폼에서
: 선언한 값을 가진다는 겁니다.
: 어떻게 해줘야 메인폼에서 선언한 값이 새 폼에서도 계속 유지가 될까요?
:
: 저같은 경우
:
: 메인.cpp ;
:
:   #include 메인.h
:   #include 새로운 폼.h
:
: 메인.h ;
:
:  typedef struct 새자료형
: {
:  ...
: }
:
: extern 새자료형 *문제의전역변수
:
: 라고 선언했는데 그 문제의 전역변수가 메인에서 초기화를 해 주면 메인폼에선
: 그 초기화 값이, 새로운 폼에선 지멋대로 NULL값이 되어버립니다
:
: 물론 컴파일이나 링크상의 에러는 없었습니다.
:
: 고수님들의 고견 기대하겠습니다....

+ -

관련 글 리스트
8838 [질문]새로운 폼과 전역변수와 관련해서 허접이 963 2001/07/07
8858     Re:[질문]새로운 폼과 전역변수와 관련해서 <- C++ 문법의 오류라 생각됩니다. 김민호 1161 2001/07/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.