|
고수님들 안녕하세요.
빌더를 접한지 얼마되지 않은 초보입니다.
폼 생성자의 오버로드 문제 때문에 이렇게 문의를 드립니다.
보통 한 application에서 두개 이상의 폼을 생성하여 show를 시킬 때
이렇게 썼었거든요.
1) File -> New -> Form 해서 새로운 폼을 하나 추가시킴
2) Project -> Options -> Forms 에서 새로 추가시킨 폼을
Auto-create forms: 에서 Available forms: 로 이동시킴
3) 원하는 곳에서 다음 구문을 추가하여 폼 생성함
if( tempForm == NULL ) tempForm = new TtempForm(this);
tempForm->Show();
여태까지 이런식으로 새로운 폼을 생성 & Show 를 했습니다.
보통 폼의 생성자가
__fastcall TForm2(TComponent* Owner);
이렇게 되어있는데
저는
__fastcall TForm2(TComponent* Owner, int inputValue);
이런 형태를 가진 폼 생성자가 필요합니다.
그래서 다음과 같이 했습니다.
1) File -> New -> Form 해서 새로운 폼을 하나 추가시킴
2) Project -> Options -> Forms 에서 새로 추가시킨 폼(Form2)을
Auto-create forms: 에서 Available forms: 로 이동시킴
3) Unit1.cpp 파일 상단에 다음 구문을 추가함
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h" ---> 새로 추가함.
4) Unit2.h 파일에 다음 구문을 추가함
class TForm2 : public TForm
{
__published: // IDE-managed Components
private: // User declarations
public: // User declarations
__fastcall TForm2(TComponent* Owner);
__fastcall TForm2(TComponent* Owner, int inputValue); ---> 새로 추가한 내용
};
5) Unit2.cpp 파일에 다음 구문을 추가함
__fastcall TForm2::TForm2(TComponent* Owner, int inputValue)
: TForm(Owner)
{
ShowMessage(IntToStr(inputValue);
}
6) Form1 에 Button 콤퍼넌트를 추가시키고 다음과 같은 Click 이벤트를 추가함
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if( Form2 == NULL ) Form2 = new TForm2(this, 2);
Form2->Show();
}
이렇게 해서 컴파일을 시키면 에러없이 컴파일이 완료됩니다.
하지만 Form1에 있는 버튼을 누르면
다음과 같은 에러창이 뜹니다.
[Debugger Exception Notification]
------------------------------------------------------------------------
Project Project1.exe raised exception class EStackOverflow with message
'Stack overflow', Process stopped.
Use Step or Run to continue
[OK] [Help]
------------------------------------------------------------------------
제가 무엇을 잘못했는지...
그리고 해결책은 무엇인지 알려주시면 감사하겠습니다.
고수님들 부탁드립니다.
|