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
[66570] Re:Re:Re:Re:Re:Re:Re:정말 간절하게 궁금합니다.
Lyn [tohnokanna] 953 읽음    2012-03-10 15:06
아직 캐릭터생성 창에서 직업별 초기스킬 찍는 중인듯 : )

프로그램 초짜 님이 쓰신 글 :
: 음 기존의 제 상식을 벗어나면 되는것이엇군요.... 제가 좀 오류를 범한 모양입니다. ㅎㅎ
:
: 좋은 정보 감사합니다. 전 이로써 레벨업 한단계 했다고 볼수잇나요? ^^
:
: 감사합니다.
:
:
: 지나가던이 님이 쓰신 글 :
: : 클래스 내부에서 변수를 선언하는 것은 단지 이런 변수를 사용하겠다고 컴파일러에게 알려주기만 하는 것이고
: : 실제 변수를 만들지는 않습니다. 그러나  클래스 외부에서 변수를 선언하는 것은 그자리에 메모리를 할당하고
: :  진짜 변수를 만드는 것입니다.
: :
: : #ifndef로 헤더가 여러번 포함되는 것을 막는 것은 맞습니다만 . 그 헤더가 여러개의 CPP파일에서 사용될때는
: : 각각 사용하는 CPP파일마다 Command라는 변수가 생겨나는 것이고 당연히 링크에러가 나는 것이지요.
: :
: : 이경우에는 fmain.cpp와 ComPort.cpp에서 각각 include 하고 있고 링크에러 메시지가 정확히 지적해 주고 있습니다.
: :
: : 전역변수를 사용하고싶으시다면 헤더파일이 아닌 CPP에 선언하여서 사용하시고 다른 CPP에서 그 전역변수가
: : 필요하시면 extern 선언하셔서 사용하시면 됩니다.
: :
: : 프로그램 초짜 님이 쓰신 글 :
: : : 도움글 정말 감사하게 받았습니다.
: : :
: : : 말씀하신대로 해결은 보았으나.. 의문점이 생겨 질문합니다.
: : :
: : : 헤더에서 기본적으로 선언을 하고
: : :
: : : CPP에서 사용을 하는게 제 기본 상식이엇습니다.
: : :
: : : 물론 헤더에서  #IFNDEF으로 중복 선언됨을 막았다고 판단했습니다.
: : :
: : : 근데 제가 이런저런 테스트를 해보니 그러치 못하군요.. 헤더 어디에서 선언하든 링크경고는 뜨고
: : :
: : : 실행은 되었습니다.  다른 컴파일이라면 무작정 에러라서 컴파일이 실행 안되었을 겁니다.
: : :
: : : 그 이유가 간단하게 설명되는 부분인지... 아니면 어려운 부분인지 조차도 구분이 안되네요
: : :
: : :
: : : 라스코니 님이 쓰신 글 :
: : : : h (헤더) 파일에는 가급적 실제 객체 선언이 되면 안됩니다.
: : : :
: : : : ComPort.h 에는
: : : : extern int Command;
: : : :
: : : : 이라고 고치시고,
: : : :
: : : : Comport.c 등에서
: : : : int Command; 로 선언하세요.
: : : :
: : : : 프로그램 초짜 님이 쓰신 글 :
: : : : : 다른 변수는 전혀없구요 Main 쪽에는 Command가 선언 되어있지 않습니다.
: : : : :
: : : : : Comport 쪽에서 변수를 Command1로 바꾸었으나 같은 증상입니다.
: : : : :
: : : : : 아마 인클루드할때 여러번 인클루드 되어서 그런거라는거 까진 알겟는데 해결을 못하고있습니다.
: : : : :
: : : : : 도움 부탁드립니다.
: : : : :
: : : : : 이길남.HoPe 님이 쓰신 글 :
: : : : : : Main 파일하고, Comport 파일에 Command 선언자가 둘다 포함되어 있다고 합니다.
: : : : : :
: : : : : : 변수 이름을 변경하여 보십시요. ^^;;
: : : : : :
: : : : : : 프로그램 초짜 님이 쓰신 글 :
: : : : : : : 프로그램을 하시느라 다들 고생 많으십니다.
: : : : : : :
: : : : : : : 6.0 기반이구요
: : : : : : :
: : : : : : : 기본 폼 하나에 폼 하나를 추가로 만들었습니다.
: : : : : : :
: : : : : : : Main 과 comport라고 명명 했습니다.
: : : : : : :
: : : : : : : comport에 헤더는
: : : : : : :
: : : : : : : //---------------------------------------------------------------------------
: : : : : : :
: : : : : : : #ifndef ComPortH
: : : : : : : #define ComPortH
: : : : : : : //---------------------------------------------------------------------------
: : : : : : : #include <Classes.hpp>
: : : : : : : #include <Controls.hpp>
: : : : : : : #include <StdCtrls.hpp>
: : : : : : : #include <Forms.hpp>
: : : : : : : //---------------------------------------------------------------------------
: : : : : : : class TSetup : public TForm
: : : : : : : {
: : : : : : : __published:    // IDE-managed Components
: : : : : : : private:    // User declarations
: : : : : : : public:        // User declarations
: : : : : : :         __fastcall TSetup(TComponent* Owner);
: : : : : : : };
: : : : : : :
: : : : : : : int Command;   //<<< 추가 하였습니다.
: : : : : : :
: : : : : : : //---------------------------------------------------------------------------
: : : : : : : extern PACKAGE TSetup *Setup;
: : : : : : : //---------------------------------------------------------------------------
: : : : : : : #endif
: : : : : : :
: : : : : : : 그러고 나서
: : : : : : :
: : : : : : : 다른 작업없이
: : : : : : : //---------------------------------------------------------------------------
: : : : : : :
: : : : : : : #include <vcl.h>
: : : : : : : #pragma hdrstop
: : : : : : :
: : : : : : : #include "fMain.h"
: : : : : : : #include "ComPort.h"  //<<<<<이부분입니다.
: : : : : : : //---------------------------------------------------------------------------
: : : : : : : #pragma package(smart_init)
: : : : : : : #pragma resource "*.dfm"
: : : : : : : TMain *Main;
: : : : : : : //---------------------------------------------------------------------------
: : : : : : : __fastcall TMain::TMain(TComponent* Owner)
: : : : : : :         : TForm(Owner)
: : : : : : : {
: : : : : : : }
: : : : : : : //---------------------------------------------------------------------------
: : : : : : :
: : : : : : : 위와 같이 fMain.cpp에 추가 기입하였습니다.
: : : : : : :
: : : : : : : 그러고나서
: : : : : : :  [Linker Warning] Public symbol '_Command' defined in both module D:\TESTCLASS\FMAIN.OBJ and D:\TESTCLASS\COMPORT.OBJ
: : : : : : :
: : : : : : : 에러 입니다.
: : : : : : :
: : : : : : : 무엇이 문제인지 도움 부탁드립니다.
: : : : : : :
: : : : : : : 가장 기본적인거이긴한데
: : : : : : :
: : : : : : : 저의 개념으로 헤더에 선언 cpp에서 인클루드...
: : : : : : :
: : : : : : : 하면 끝인데... ㅜㅜ
: : : : : : :
: : : : : : : 창피한일인건 알지만 알몸으로 덤벼 봅니다. 따끔한 조언 부탁합니다.

+ -

관련 글 리스트
66517 정말 간절하게 궁금합니다. 프로그램 초짜 1055 2012/03/07
66518     Re:정말 간절하게 궁금합니다. 이길남.HoPe 952 2012/03/07
66519         Re:Re:정말 간절하게 궁금합니다. 프로그램 초짜 864 2012/03/07
66521             Re:Re:Re:정말 간절하게 궁금합니다. 라스코니 956 2012/03/07
66561                 Re:Re:Re:Re:정말 간절하게 궁금합니다. 프로그램 초짜 863 2012/03/09
66576                     Re:Re:Re:Re:Re:정말 간절하게 궁금합니다. 라스코니 947 2012/03/12
66567                     Re:Re:Re:Re:Re:정말 간절하게 궁금합니다. 지나가던이 937 2012/03/10
66569                         Re:Re:Re:Re:Re:Re:정말 간절하게 궁금합니다. 프로그램 초짜 847 2012/03/10
66570                             Re:Re:Re:Re:Re:Re:Re:정말 간절하게 궁금합니다. Lyn 953 2012/03/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.