• ベストアンサー
  • すぐに回答を!

【VC++6.0】イベントハンドラ関数を流用したいのですが、、、

VC++超初心者です。 既出の質問(http://okwave.jp/qa2658942.html)と同様ですが、VC2005(CLR)でなく、VC++6.0の時 どのようにコーディングすればよいか教えていただけませんでしょうか。 よろしくお願いします。 ********************************** 以下の2つのボタンのイベントハンドラ関数があった場合 //ボタン1のイベントハンドラ関数 void CAAAADlg::OnOK() { 処理内容 } //ボタン2のイベントハンドラ関数 void CBBBBDlg::OnOK() { } ボタン2をクリックしたときの動作とボタン1の動作を同じにしたいと思っています。 **********************************

共感・応援の気持ちを伝えよう!

  • 回答数6
  • 閲覧数1273
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.6
  • BLK314
  • ベストアンサー率55% (84/152)

それではサンプルを載せます AAAADlg.cpp ここから ============================================== // AAAADlg.cpp : 実装ファイル // #include "stdafx.h" #include "DlgTest.h" #include "AAAADlg.h" // CAAAADlg ダイアログ IMPLEMENT_DYNAMIC(CAAAADlg, CDialog) CAAAADlg::CAAAADlg(CWnd* pParent /*=NULL*/) : CDialog(CAAAADlg::IDD, pParent) { } CAAAADlg::~CAAAADlg() { } void CAAAADlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAAAADlg, CDialog) END_MESSAGE_MAP() // CAAAADlg メッセージ ハンドラ AAAADlg.cpp ここまで ============================================== BBBBDlg.cpp ここから ============================================== #include "StdAfx.h" #include "resource.h" // これがないと'IDD_AAAA'が未定義のコンパイルエラーとなります #include "BBBBDlg.h" CBBBBDlg::CBBBBDlg(void) { } CBBBBDlg::~CBBBBDlg(void) { } void CBBBBDlg::OnOK() { if (AfxMessageBox(_T("ダイアログを閉じます。よろしいですか?"), MB_OKCANCEL) == IDCANCEL) return; CAAAADlg::OnOK(); } BBBBDlg.cpp ここまで ============================================== DlgTestDlg.cpp ここから============================================= // DlgTestDlg.cpp : 実装ファイル // #include "stdafx.h" #include "DlgTest.h" #include "DlgTestDlg.h" #include "BBBBDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // アプリケーションのバージョン情報に使われる CAboutDlg ダイアログ class CAboutDlg : public CDialog { public: CAboutDlg(); // ダイアログ データ enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV サポート // 実装 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) END_MESSAGE_MAP() // CDlgTestDlg ダイアログ CDlgTestDlg::CDlgTestDlg(CWnd* pParent /*=NULL*/) : CDialog(CDlgTestDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CDlgTestDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CDlgTestDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_BN_CLICKED(IDC_TEST, &CDlgTestDlg::OnBnClickedTest) END_MESSAGE_MAP() // CDlgTestDlg メッセージ ハンドラ BOOL CDlgTestDlg::OnInitDialog() { CDialog::OnInitDialog(); // "バージョン情報..." メニューをシステム メニューに追加します。 // IDM_ABOUTBOX は、システム コマンドの範囲内になければなりません。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // このダイアログのアイコンを設定します。アプリケーションのメイン ウィンドウがダイアログでない場合、 // Framework は、この設定を自動的に行います。 SetIcon(m_hIcon, TRUE);// 大きいアイコンの設定 SetIcon(m_hIcon, FALSE);// 小さいアイコンの設定 // TODO: 初期化をここに追加します。 return TRUE; // フォーカスをコントロールに設定した場合を除き、TRUE を返します。 } void CDlgTestDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // ダイアログに最小化ボタンを追加する場合、アイコンを描画するための // 下のコードが必要です。ドキュメント/ビュー モデルを使う MFC アプリケーションの場合、 // これは、Framework によって自動的に設定されます。 void CDlgTestDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 描画のデバイス コンテキスト SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // クライアントの四角形領域内の中央 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // アイコンの描画 dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } // ユーザーが最小化したウィンドウをドラッグしているときに表示するカーソルを取得するために、 // システムがこの関数を呼び出します。 HCURSOR CDlgTestDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CDlgTestDlg::OnBnClickedTest() { CBBBBDlg dlg; dlg.DoModal(); } DlgTestDlg.cpp ここまで============================================= AAAADlg.h ここから============================================= #pragma once // CAAAADlg ダイアログ class CAAAADlg : public CDialog { DECLARE_DYNAMIC(CAAAADlg) public: CAAAADlg(CWnd* pParent = NULL); // 標準コンストラクタ virtual ~CAAAADlg(); // ダイアログ データ enum { IDD = IDD_AAAA }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV サポート DECLARE_MESSAGE_MAP() }; AAAADlg.h ここまで============================================= BBBBDlg.h ここから============================================= #pragma once #include "aaaadlg.h" class CBBBBDlg : public CAAAADlg { public: CBBBBDlg(void); virtual ~CBBBBDlg(void); protected: virtual void OnOK(); }; BBBBDlg.h ここまで============================================= 以上は私が作成したサンプルの一部です。 きちんと動作確認してあります。 コンパイル・エラーは #include "BBBBDlg.h"の前に #include "resoure.h"がなかったためではないでしょうか? 注目して頂きたいのは CDlgTestDlg::OnBnClickedTest()の中身です。 CBBBBDlg dlg; dlg.DoModal(); ごく普通にCBBBBDlgを使っています (CAAAADlgは出てきていません) また CBBBBDlgのh/cppのどこでも "明示的には" CAAAADlgのコンストラクタを呼び出していないことにも注目です。 一見すると CAAAADlgをインスタンス化していない ように見えますが CBBBBDlgはCAAAADlgの派生なので CBBBBDlgのインスタンスの中にCAAAADlgのインスタンスがあります。 サンプルの概要はこうです CAAAADlgは"Hello World!"と表示するだけのダイアログで OKボタンのみ持っています。 これを一切いじれないものと仮定します。 CBBBBDlgは基本的にはCAAAADlgと全く同じです。 しかし、 OnOKでメッセージボックスを表示し 閉じてよいかの確認をする この点の差異があります。 >詳しい方にちょっとだけソースコードを見て頂いたら、 >CAAAADlgをインスタンス化していなから、 >CAAAADlg::OnOK()使えないと指摘を受けました。 C++ではクラスのメソッド呼び出しに class::method() が使用できます。これは上でみたように派生クラスのメソッド内部で 基本クラスのメソッドを呼び出す際に使われます。 また、staticなメソッドを呼ぶ際にも使えます。 この場合 インスタンス化していなくても、用いることが可能です。 ”詳しい方"はCに詳しい方ですか? Cに詳しい方がそのままC++にも詳しいとは限りません。 注意が必要です。

共感・感謝の気持ちを伝えよう!

質問者からの補足

長文にわたるご回答、ありがとうございます。 また、ご回答が遅れてしまい、申し訳ございませんでした。 本件は、結果的に他の方に任せてしまいましたが、 悔しいので自分でもやってみるつもりです。 また、この度、長文にわたって教えて頂いたソースも まだ理解できておりませんが、確実に糧にしていきたいと 思います。 >”詳しい方"はCに詳しい方ですか? >Cに詳しい方がそのままC++にも詳しいとは限りません。 >注意が必要です。 素人の私の意見ですが、私もそう思います。 私はC言語は学生の時からなんとなく使っていますが、 ・C++、 ・VC++(6.0)(MFCとういうのでしょうか?)、 ・VC++/CLI(VC++ .NET) これらは、かなり違うものなんだな、と感じています。 とにかく、勉強し直します。 今回は、No6さんの回答で本件を終了しますが、 また、宜しければご教授お願いします。 本当に、ご親切な対応ありがとうございました。

関連するQ&A

  • イベントハンドラ関数について

    現在VC++/CLR 2005 でプログラミングをしています。 基本的な事柄かもしれませんが、質問させてください  以下の2つのボタンのイベントハンドラ関数があった場合 //ボタン1のイベントハンドラ関数 private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) String^ str = textBox1->Text } //ボタン2のイベントハンドラ関数 private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { } ボタン2をクリックしたときの動作とボタン1の動作を同じにしたいと思っています。 その場合は private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) String^ str = textBox1->Text } //ボタン2のイベントハンドラ関数 private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { String^ str = textBox1->Text } のようにボタン2のイベントハンドラ関数をボタン1と同じように書けばいいのですが イベントハンドラ関数の処理が膨大になった場合を考えて省略する 書き方は無いのでしょうか?(以下の場合ですとエラーが起こってしまいます。) private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { button1_Click(); } 宜しくお願いします

  • イベントハンドラ処理が終了しているかどうかを確認するには?

    イベントハンドラ処理が終了しているかどうかを確認するには? 前回以下のページにて「c#でボタンのアクションが終わった後に再度同じ動作をさせるには?」 という質問をしました所、イベントハンドラ処理が終了していないのでは?という回答を頂きました。 http://okwave.jp/qa/q5833308.html しかし、残念ながら当方初心者の為、 デバッガを利用して 「LoadData()処理」や「ボタンのClickイベントに対応付けしたイベントハンドラ処理」が  ・ちゃんと最後まで終了しているか  ・無限ループに陥っていないか  ・IO入力待ちで止まっていないか というのをどのように確認してよいかすらわかりません。 どうすれば確認できるのでしょうか? 何か参考になるページなどでも結構ですので教えてください。 よろしくお願いします。

  • 【VC++2005(CLR)】ダイアログ右上の最小化、最大化、閉じるボタンの制御の仕方を教えてください。

    VC++初心者です。 たびたび、お世話になっております。 現在、VC++2005 Express Edition、CLRのプロジェクトで コーディングしています。 基本的な質問だと思いますが、ダイアログ右上に配置される 最小化、最大化、閉じるボタンの制御の仕方を 教えていただけませんでしょうか。 具体的にはやりたいことは、以下のようなものです。 ・閉じるボタンを押されたら、MessageBoxを表示させる。 ・他のダイアログのボタンから別のダイアログの最大化ボタンが  押されたことと同じ動作をする。

その他の回答 (5)

  • 回答No.5
  • zwi
  • ベストアンサー率56% (730/1282)

CBBBBDlgがCAAAADlgを継承しているなら、CBBBBDlgのインスタンスはCAAAADlgのインスタンスを内包しています。なので、CAAAADlg::OnOK()はちゃんと呼び出せます。 そういう指摘受けたとしたら、ちゃんとCAAAADlgを継承していないのでは? どちらにしてもC++の知識が無さ過ぎますので、おっしゃってる関数化も多分無理だと思います。MFCの機能無しに関数化できますか?コントロールなどを参照もMFCを使えませんよ。 まぁ、後々の事を考えると関数化は止めといた方が良いと思いますが。最善の策はC++を勉強することです。あるいは、分る人に全部頼むかですね。

共感・感謝の気持ちを伝えよう!

質問者からの補足

ご回答、ありがとうございます。 (返信遅れてすみませんでした。) ご指摘のとおりだと思います。 C++はじっくり勉強していないので、 オブジェクト指向の考え方がいまいち理解しておりません。 時間をみつけて、勉強しなおします。

  • 回答No.4
  • BLK314
  • ベストアンサー率55% (84/152)

簡単です。 しかも、質問者さんが (偶然かもしれませんが) 正解を出しています。 ただ、気づいていないのは (既にお気づきの場合はごめんなさい) CBBBBDlgをCAAAADlgから派生させる これだけです。 両者の基本クラスも必要ありませんし 既に作成してしまった CAAAADlg には一切手を加える必要はありません。 そして CBBBBDlgでOnOKをオーバーライドします。 中身は void CBBBBDlg::OnOK() { CBBBBDlgの専用処理(その1) CAAAADlg::OnOK() } です。 どこかで見たコードです。 補足そのものです。 ただ CAAAADlg::OnOK() であって CAAAADlg::OnOK() の処理内容 ではありません。 もちろん後者 CAAAADlg::OnOK() の処理内容 でも構いませんが、 後々(バグや仕様変更などで) CAAAADlg::OnOK() を修正した場合 CBBBBDlg::OnOK() も修正しなければならない というデメリットがあるので 前者 CAAAADlg::OnOK() をお勧めします。

共感・感謝の気持ちを伝えよう!

質問者からの補足

ご回答ありがとうございます。 (返信送れて申し訳ございませんでした。) なるほど、と思い早速コーディングしましたが、 コンパイルエラーが出てしまいました。 詳しい方にちょっとだけソースコードを見て頂いたら、 CAAAADlgをインスタンス化していなから、 CAAAADlg::OnOK()使えないと指摘を受けました。 やはり、動かしたい部分を関数化して切り出すしかないのでしょうか?

  • 回答No.3
  • redfox63
  • ベストアンサー率71% (1325/1856)

CAAAADlgとCBBBBdlgは親子関係あるのでしょうか まったく別物ということですか CAAAADlg::OnOKの中でCAAAADlgのコントロールなどを参照しているのですか たとえばどこかのテキストボックスの値のチェックとか

共感・感謝の気持ちを伝えよう!

質問者からの補足

ご回答、ありがとうございます。 >CAAAADlg::OnOKの中でCAAAADlgのコントロールなどを参照しているのですか 参照しています。

  • 回答No.2
  • zwi
  • ベストアンサー率56% (730/1282)

まったく同じでないなら、CDialogクラスを継承してCAABBDlgと言うのを作って、共通な処理させるメンバ関数を例えばCAABBDlg::OkCom()と言う名前で作ります。 で、CAAAADlgとCBBBBDlgの親クラスをCAABBDlgに書き換えます。 で実際の呼び出しは、 void CAAAADlg::OnOK() { OkCom(); } void CBBBBDlg::OnOK() { CBBBBDlgの専用処理(その1) OkCom(); } ってするのはどうでしょか?

共感・感謝の気持ちを伝えよう!

質問者からの補足

ご回答、ありがとうございます。 他の方からも、zwiさんのようなアドバイスを頂きました。 void CAAAADlg::OnOK()は先人が書いたものなので、 個人的にはあまり手を加えたくありません。 そのため、CAAAADlg::OnOK()を呼び出せないかな、と 質問させていただきました。

  • 回答No.1
  • zwi
  • ベストアンサー率56% (730/1282)

クラスが違うが同じ処理が必要な場合は、CAAAADlgとCBBBBDlgに共通の親クラスを作ってOnOK()を継承させれば解決すると思います。

共感・感謝の気持ちを伝えよう!

質問者からの補足

CAAAADlgはすでに作成済みであり、質問に書いた「処理内容」という 部分も大規模のものになっております。 それでも可能でしょうか? また、もう少し詳細をお話しすると CBBBBDlg::OnOK() の内部は、CAAAADlgと全く同じではなく、 void CBBBBDlg::OnOK() { CBBBBDlgの専用処理(その1) CAAAADlg::OnOK() の処理内容 } という具合にしたいです。

関連するQ&A

  • 【VC++2005(CLR)】lzh形式で、圧縮、解凍したい

    いつもお世話になっております。 VC++初心者です。 現在、VC++2005 ExpressEditon CLRプロジェクトで コーディングしいます。 あるボタンをクリックすることで、指定したファイルaaa.txtを lzh形式で圧縮するようにするには、どのようにしたら宜しいでしょうか。 そして、ある指定したファイルbbb.lzhを解凍するには どのようにしたら宜しいでしょうか。 お手数ですが、サンプルソースを紹介して頂きたくお願いします。

  • VC++ ビルドできず?

    VC++2010をダウンロードして、プログラムを作って、ビルドしようとするのですが エラーでビルドしません。使用前になにか設定等あるのでしょうか?教えて下さい。 (1)簡単なボタンとラベルで、ボタンを押したら、文字がLabelに表示するもビルドしません。 (2)OSはWindows7 VC++2010でビルドせず。 (3)別なPCで Windows XPとVC++2010では問題なく、ビルド、動作します。 (4)Windows8とVC++2010でも問題ありません。 (5)VC++2010のソースはvc-webの同じものでダウンロードして、PCにインストールしています。 以上、よろしくお願いします。

  • VC++のコーディングについて

    VC++初心者です。 VC++のWindowsフォームアプリケーションを使用してテストプログラムを作ってみようと思っています。 初歩的な質問ですみません。 VC++でWindowsフォームアプリケーションを作成する場合、 フォームのヘッダーファイル(Form.h)にコーディングしていくものなのでしょうか? ボタンクリック処理など、ヘッダーファイルに作成されてしまいます。 私の先入観で、cppファイルにコーディングするものだと思っていたのですが、 VC++のWindowsフォームアプリケーションとは、こういうものでしょうか? ヘッダーファイルにコーディングするという感覚が何だか気持ち悪いです。 また、VC++を使用してWindowsアプリケーションを作る勉強がしたいのですが、 「初心者でも分かる+オススメの参考書籍」がありましたら、教えていただけると幸いです。 基本的な質問で意味不明かもしれませんが、ご回答いただけると助かります。 よろしくお願いします。

  • 【VC++2005(CLR)】ダイアログ呼び出し元ダイアログを手前に表示させたい

    VC++初心者です。 現在、VC++ express edition、CLRプロジェクトでコーディングしております。 いろいろな方の力を借りて、モードレスでダイアログ(子ダイアログ)を 呼び出しだすことができました。ありがとうございました。 しかしながら、常にその子ダイアログが呼び出し元ダイアログ(親ダイアログ)の手前に 表示されてしまいます。 各ダイアログがクリックされるたびに、クリックされたダイアログが手前に表示する ようにできませんでしょうか。 よろしくお願いします。

  • 待機関数(WaitForMultipleObjects等)について教えてください

    Windows2000又はXPで動作させるプログラムを作成していますが、スレッド(AfxBeginThread()で作成した処理)からは待機関数(WaitForMultipleObjects等)は正常に動作しますが、画面のボタン等のクリックイベントからは正常に動作しませんが、これは何故でしょうか?HELPで「このハンドルは、SYNCHRONIZE アクセスを持っていなければなりません」と出ていましたが、何か方法があるのでしょうか? ちなみに言語はVC++6.0です。

  • 【VC++2005(CLR)】動的にパネルやグループに含まれるボタン、ラベルを増やすには?

    VC++初心者です。 現在、VC++2005 express edition、CLRプロジェクトでコーディングしております。 いきなりですが、以下のようなイメージをコーディングしていきたい のですが、どうしたら宜しいでしょうか。 ************************************************ ・現在、グループボックスA(またはパネルA)にボタンA、ラベルA  を配置しています。 ・int iの値だけ、グループボックスA(それに含まれるボタンA、  ラベルA)を増やしたいです。 例:int i = 1;のとき グループボックスA1   int i = 2;のとき、グループボックスA1、グループボックスA2    という感じで増やしていきたいです。 ・グループボックスAを増やしていくと、フォームに入りきらなく  なるので、これを回避する方法はありますか? ************************************************ そもそもこれは、実現可能なのでしょうか?

  • VisualStudio.netでmemcmp関数が使えない?

    以前VC++6.0で作ったプログラムをVisualStudio.net_pro_ver2003でコンパイルしようと思っています。 VC++の空プロジェクトを作り、既存項目の追加で以前作成したソースファイルを挿入し、 それをコンパイルしました。 すると、初めにmemcmp関数が「'/clr'オプションを持つCコンパイラで完全なプロトタイプ関数が必要です」と表示され、 memcmpのある全ての行に対し、「関数へのポインタを通して実行される呼び出しに対する引数が多過ぎます」いうエラーが出てしまいます。 strings.hもインクルードしておりますし、VC++では問題なくコンパイルが通っていたので原因が良く分かりません。 そもそもVC時代から良く分からずに使っていたので基本が出来ていないようですが、 宜しく御願い致します。

  • 【VC++2005(CLR)】フォームを拡大後、ボタンなどを均等に配置するには?

    VC++初心者です。 現在、VC++2005 express edition、CLRプロジェクトでコーディングしております。 現在フォームを拡大すると、拡大前と同じ場所にボタンや ラベルが配置されています。 (拡大後、右隅にラベル、ボタンが配置されます。) これをフォーム拡大と同時に、拡大後のフォームに拡大前と同じ間隔の 比率でボタンやラベルを均等配置するにはどうしたらよろしいでしょうか? これに付随して、フォームをある大きさまで縮小させたくありません。 それを実現するにはどうしたら宜しいでしょうか。

  • VC++ 2008

    VC++2008(Express Edition)であるボタンを押したときの動作についてですが private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { richTextBox1->Text = "測定開始\n"; func(); // ある測定の関数です richTextBox1->Text += "測定終了"; } 上記のようなプログラムが実行されたとき、button1_Click()を抜けるまでテキストボックスに 測定開始 測定終了 の表示がされませんが何故でしょう? func()自体の処理に1分程かかるため、ボタンを押してから1分程経たないとテキストボックスには何も表示されない状態です。 リアルタイムで表示することは可能でしょうか?

  • [VC++]ヘッダファイルからの関数コール

    Formのボタンクリックイベント(Form.h)から 別ファイル(.cpp)の関数をコールしたいのですがうまくいきません、 どのようにすればよいでしょうか?ご教授お願いします。 1> : error C2144: 構文エラー : 'void' は ')' によって先行されなければなりません。 1> : error C2059: 構文エラー : ')' //----- main1.h #include <stdio.h> #include "Form1.h" namespace A { void main1(); } //----- main1.cpp #include <stdio.h> #include "main1.h" using namespace A; void main1() { //処理 } //----- Form1.h #include <stdio.h> #include "main1.h" void main1(void); namespace A { public ref class Form1 : public System::Windows::Forms::Form { public: private: System::Void btn_Click(System::Object^ sender, System::EventArgs^ e) { //★クリックイベントからmain1の関数コールしたい main1(void); } }; }