- ベストアンサー
Borland C++ Builder 4 初心者です。
C言語初心者(に毛が生えた程度)です。 VBでしたら使えますし、コードが読めるので、 似たような(と言われた)Borland C++ Bulder4を 使用して、仕事でソフトを作ることになりました。 ところが、ヘルプを見ても良くわからないのですが、 VBでのShow&Unloadにあたる命令って何でしょう? 起動時にMainフォームを表示させておき、 各Clickイベントで別のフォームに切り替えるようにしたいのです。 (Main→Log (他の機能は後日に完成ということです。) 本来なら独習すべきなのでしょうが、明日中に画面を完成させ、 お客にプレゼンすることになっているので、恥ずかしながら、 ここの知恵をお借りしたいのです。 どうかよろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは、honiyonです。 私は前回の回答の前にサンプルを作成して実行出来る事を確認しています。 サンプルは以下の手順で作成しました。 1.C++ Builderを起動 2.フォームを一枚追加(Form2) 3.Form1に Button1を配置 4.Button1のクリック時のイベントに Form2->Show(); を記述 5.Unit1.cppに #include "unit2.h" を記述 こちらで問題なく動作しました。 念のため以下がソースです。(Unit1.cpp) Form2(Unit2.cpp)は作成しただけで手をつけていません。 //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" #include "Unit2.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Form2->Show(); } //--------------------------------------------------------------------------- 今回の隣家エラーの意味は、「モジュール Project1.obj が参照する外部シンボル 'TForm1::' が未解決 です。 詳しくは、そのエラーメッセージをクリックし、F1を押して下さい。詳しい開設が表示されます。(C++ Builder4で動作を確認) これについては、ソースコードを見てみないと原因が分かりません。 色々原因を探ってみて分からない場合は、一服した後少し昔に戻ってみましょう。 今回のケースは根本的な部分なので最初まで戻ることになってしまいますが。 まずは今のプロジェクトファイルはおいといて、新しいプロジェクトファイルで簡単な骨組みを作成して動作を確認してみてはいかがでしょうか? そしてそれに肉付けしていき、こまめにコンパイル、実行をします。 その過程でエラーの原因が分かるかもしれないし、分からないまま今のプロジェクトファイルと同じ物が出来てしまうかもしれません。 かなり遠回りで時間のかかる作業ですが、急がば回れといいますようにどうしても原因が分からない場合は、これが有効な手段だと思います。 参考になれば幸いです(..
その他の回答 (4)
- Haizy
- ベストアンサー率40% (404/988)
こんにちは。 >[リンカ エラー] Unresolved external 'TForm1::' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER4\PROJECTS\PROJECT1.OBJ. ビルダーだと、Cソースと同名のヘッターファイルを勝手に作って、そこで、オブジェクトを宣言していますが、そちらに追加されていますか? 多分宣言がされていないのではないでしょうか。 そもそも、フォーム名は、Tform1ですか? 表示-オブジェクトインスペクタ(だと思う) イベント タグ内に OnClick がありますので、そいつをダブルクリックしてみてください。(どこか、ウチ間違いかもしれません。) なお、VBと違って、大文字・小文字が、厳しいですからねぇ・・・。(自動修正されません) 参考になれば。 でわ
お礼
下にも書きましたが、作りなおしで何とかなりましたが、 大文字小文字のミスが3箇所ほどありました。 ご注意頂いたので早期に発見できましたので、 関係ないかもしれませんが、お礼を一言。 ありがとうございました。
- honiyon
- ベストアンサー率37% (331/872)
こんにちは、honiyonです。 すいません、私の回答ミスでした。 Form21->Show; ではなく、 Form21->Show(); でした。 C/C++は引数がなくても()が必要でしたね。 すいませんでした(..
補足
さっそくやってみました。 void __fastcall TForm1::Button2Click(TObject *Sender) { Form21 -> Show(); } //-------------------------------------------- 今度はリンカエラーとかになりました。(TT) [リンカ エラー] Unresolved external 'TForm1::' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER4\PROJECTS\PROJECT1.OBJ. [リンカ エラー] Unresolved external 'TForm21::' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER4\PROJECTS\PROJECT1.OBJ. 困ったなぁ・・・
- honiyon
- ベストアンサー率37% (331/872)
こんにちは、honiyonです。 Form4なんて知らないよって言われていますね。 Main.cpp には、Form4を宣言してあるLog_err.cpp(Log_err.h)をインクルードする事を宣言しまたか? Main.cppの一番最初にいろいろ #includeの宣言があると思います。 そこに #include "Log_err.h" を書き加えてください。 Form21を使用しようとしているのに Form4なんて知らないって言われているのがよく分からないですが、とりあえずこれで解決出来ると思います。 参考になれば幸いです(..
補足
Form4 は貼り間違いです。すいません。 今度はインクルードを入れました。 #include "Main00.h" #include "Log_err.h" //------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { Form21 -> Close; } //------------------------------------------- でも、実行すると、 [C++ エラー] Main00.cpp(15): E2235 Member function must be called or its address taken. と出ます。ヘルプを参照しても、メンバー関数を呼び出すかアドレスを指定してくださいって クラスじゃなかったんでしょうか?それとも、まだ、凡ミスしてるのでしょうか?
- honiyon
- ベストアンサー率37% (331/872)
こんにちは、honiyonです。 対象のフォームのクラス名が Form1の場合、 Form1.Show → Form1->Show; Form1.Hide → Form1->Close; Form1.Unload → Form1->Free; となります。 Form1->Freeをした場合、クラスを解放しているので再び表示するには、 Createしなければなりません。 例)Form1 = TForm1.Create(オーナーオブジェクト); C++ Builderの場合では、おほどメモリ不足で悩まない限りは Closeで十分だと思います。(私的意見です) 閉じるボタンが押された時も、C++ Builderでは Freeではなく Closeが実行されます。 参考になれば幸いです(..
補足
Main.cppのForm1上のボタン2をクリックすることで、 Log_err.cppのForm21を表示させたいのですが、 void __fastcall TForm1::Button2Click(TObject *Sender) { } //--------------------------------------------------------------------------- に、『 Form21 -> Show 』では [C++ エラー] Main00.cpp(13): E2451 Undefined symbol 'Form4'. [C++ エラー] Main00.cpp(14): E2379 Statement missing ;. と出てしまいました。 クラス名『Log_err』でも同じでした。
お礼
別のプロジェクトに1つずつ追加してコンパイルさせてみました。 どうもセーブエラーを起こしていたようで、Form1とForm21が 正常に保存されていなかったようです。 作成しなおしたらうまくいきました。ありがとうございました。