|
도움글 정말 감사하게 받았습니다.
말씀하신대로 해결은 보았으나.. 의문점이 생겨 질문합니다.
헤더에서 기본적으로 선언을 하고
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에서 인클루드...
: : : :
: : : : 하면 끝인데... ㅜㅜ
: : : :
: : : : 창피한일인건 알지만 알몸으로 덤벼 봅니다. 따끔한 조언 부탁합니다.
|