|
서영재 님이 쓰신 글 :
: 상속성??
: C++은 잘몰라서..
: 아마 상속성이 문제인듯한데..
: 첫번째
: : void TForm1::Exchange(TFlatButton *Change)
: : {
: : Button1->어쩌구 저쩌구;
: : }
: : 로 사용하시든지
: 이렇게 하니
: [C++ Error] Unit1.cpp(28): E2316 'TForm1::Exchange(TFlatButton *)' is not a member of 'TForm1'
: 이런 에러가 납니다.
: 왜안돼지??
---> 당연히 이렇게 사용하실 경우엔, Exchange 함수가 TForm1 의 멤버 함수로 선언되어 있어야 합니다.
Unit1.h 에 TForm1 class 가 선언이 되어 있다면, 반드시 클래스 선언 안에 void Exchange(TFlatButton *Change);
라는 멤버 프로토타잎을 선언해 주셔야죠.
:
: 글구 두번째...
: : void Exchange((TFlatButton *Change)
: : {
: : Form1->Button1->어쩌구 저쩌구;
: : }
: 이부분은..
: Form1 이녀석자체를...
---> Form1 이 참조가 되지 않는 다는 것은, 다음과 같은 이유에서일 겁니다.
기본적으로 폼이 생성 되면,
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
와 같은 코드가 자동으로 생성되죠.
여기서, TForm1 *Form1; 을 보십시오.
이 부분이 포함되어 있는 이상 Form1 을 알 수 없다는 에러 메시지를 받을 일이 없습니다.
Unit1.cpp 와 같이 TForm1 이 구현되어 있는 cpp가 아닌, 다른 cpp 화일에서 Form1 에 접근 하려 하실
경우엔, Unit1.h 를 include 하시면 됩니다.
extern PACKAGE TForm1 *Form1;
라는 문장이 있어 외부 참조가 가능케 하니까요.
물론, extern 은 85년에 발표된 C++의 확장 문법도 아닌(여러 C++ 문법이 ANSI88, ANSI89를 통해 C로
흡수되긴 했지만), C의 고유 문법이죠.
:
: C++은.. 언제나 공부해야한다 공부해야한다곤 했었는데...
: 요즘엔 바보같이 C알고리즘을 공부하고있습니다.
: 곧 끝나면C++넘어가야겠네요...
: 정말 기초가 없으니 힘드네요...
:
: 혹시 제가 잘못이해했을지도...
:
: 다시 간단히 제질문을 요약하자면..
: TForm1위에 "Button1"이란 버튼컴포넌트와 다른 컴포넌트를 만들면..
: 이컴포넌트들의 이벤트에선
: "Form1->Button1" 이렇게 하든 그냥 "Button1" 이렇게해서 Button1을 어떻게 하면되는데...
: 제가 임의로 만든 함수에선 "Form1->Button1" 이것도,Button1 이것도.. 안되네요..
---> 다시 한번 간단히 제 답변을 요약해 드리자면,
임의로 만든 함수가, Unit1.cpp 와 같이, TForm1 이 구현된 소스가 아닌 별개의 소스인 경우엔
#include "Unit1.h" 를 별개의 소스에도 추가해 주시면 됩니다.
만약 그렇지 않고, Unit1.cpp 안에 임의로 만든 함수시라면, Form1->어쩌구가 당연히 먹습니다.
(TForm1 *Form1; 문장이 있으니까요)
|