|
왕께서 공부에 열심이시군요 ^^;
static은 쓰이는 곳에 따라 의미에 차이가 조금씩 있는데, 질문의 경우
: static void compress ( Char *name );
선언은 compress 함수가 unit3.obj 내에만 있다는 뜻이며, 다른 곳에서는 인식할 수 없다는 뜻입니다.
그러므로 compress 함수는 unit3.cpp 내에 구현되어 있어야 합니다.
컴파일 에러 메시지는 unit3.obj 내메 한정된 함수를 unit1.obj 에서 부를려고 했기 때문에 링크 에러가 난 것입니다.
이를 static 을 풀면 외부 참조가 가능하니 unit1.cpp 에서 부를 수 있지만, 다른 에러가 있다고 했는데 이는 함수 명이 겹쳐서 생기는 문제입니다. 함수명을 바꾸거나 하는 방법으로 해결할 수 있습니다.
언어를 제대로 하려면 예약어에 대해서는 분명하게 아셔야 합니다.
그럼 .
정용훈 님이 쓰신 글 :
: bcb6 왕초입니다. 답변 부탁드려요.
:
: //Unit3.h---------------------------------------------------------------------------
: ....
: #include "bzlib.h"
: ....
:
: static void compress ( Char *name );
: //---------------------------------------------------------------------------
:
: //Unit1.cpp---------------------------------------------------------------------------
: #include "Unit3.h"
: ...
: void __fastcall TForm1::Button4Click(TObject *Sender)
: {
: compress ( "C:\\Documents and Settings\\jyh\\바탕 화면\\a.msi" );
: }
: ...
: //---------------------------------------------------------------------------
: bzip2 소스를 사용할려고 하는 중입니다.
: 저 상태에서 컴파일을 하게 되면 이상하게 아래와 같은 에러가 나내요..
:
: [C++ Error] Unit1.cpp(105): E2451 Undefined symbol 'compress(char *)'
:
: static void compress ( Char *name ); 여기서 static을 제거 하면 되긴하던데 다른 에러가 생겨서..
: 왜 static함수는 호출을 하지 못하는 것이죠??
|