• ベストアンサー

Borland C++ Builder 4 初心者です。

C言語初心者(に毛が生えた程度)です。 VBでしたら使えますし、コードが読めるので、 似たような(と言われた)Borland C++ Bulder4を 使用して、仕事でソフトを作ることになりました。 ところが、ヘルプを見ても良くわからないのですが、 VBでのShow&Unloadにあたる命令って何でしょう? 起動時にMainフォームを表示させておき、 各Clickイベントで別のフォームに切り替えるようにしたいのです。 (Main→Log (他の機能は後日に完成ということです。) 本来なら独習すべきなのでしょうが、明日中に画面を完成させ、 お客にプレゼンすることになっているので、恥ずかしながら、 ここの知恵をお借りしたいのです。 どうかよろしくお願いします。

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

  • ベストアンサー
  • honiyon
  • ベストアンサー率37% (331/872)
回答No.4

こんにちは、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で動作を確認)  これについては、ソースコードを見てみないと原因が分かりません。  色々原因を探ってみて分からない場合は、一服した後少し昔に戻ってみましょう。 今回のケースは根本的な部分なので最初まで戻ることになってしまいますが。  まずは今のプロジェクトファイルはおいといて、新しいプロジェクトファイルで簡単な骨組みを作成して動作を確認してみてはいかがでしょうか? そしてそれに肉付けしていき、こまめにコンパイル、実行をします。   その過程でエラーの原因が分かるかもしれないし、分からないまま今のプロジェクトファイルと同じ物が出来てしまうかもしれません。  かなり遠回りで時間のかかる作業ですが、急がば回れといいますようにどうしても原因が分からない場合は、これが有効な手段だと思います。  参考になれば幸いです(..

bakuretsu
質問者

お礼

別のプロジェクトに1つずつ追加してコンパイルさせてみました。 どうもセーブエラーを起こしていたようで、Form1とForm21が 正常に保存されていなかったようです。 作成しなおしたらうまくいきました。ありがとうございました。

その他の回答 (4)

  • Haizy
  • ベストアンサー率40% (404/988)
回答No.5

こんにちは。 >[リンカ エラー] Unresolved external 'TForm1::' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER4\PROJECTS\PROJECT1.OBJ. ビルダーだと、Cソースと同名のヘッターファイルを勝手に作って、そこで、オブジェクトを宣言していますが、そちらに追加されていますか? 多分宣言がされていないのではないでしょうか。 そもそも、フォーム名は、Tform1ですか? 表示-オブジェクトインスペクタ(だと思う) イベント タグ内に OnClick がありますので、そいつをダブルクリックしてみてください。(どこか、ウチ間違いかもしれません。) なお、VBと違って、大文字・小文字が、厳しいですからねぇ・・・。(自動修正されません) 参考になれば。 でわ

bakuretsu
質問者

お礼

下にも書きましたが、作りなおしで何とかなりましたが、 大文字小文字のミスが3箇所ほどありました。 ご注意頂いたので早期に発見できましたので、 関係ないかもしれませんが、お礼を一言。 ありがとうございました。

  • honiyon
  • ベストアンサー率37% (331/872)
回答No.3

こんにちは、honiyonです。  すいません、私の回答ミスでした。  Form21->Show;  ではなく、  Form21->Show();  でした。  C/C++は引数がなくても()が必要でしたね。  すいませんでした(..

bakuretsu
質問者

補足

さっそくやってみました。 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)
回答No.2

こんにちは、honiyonです。  Form4なんて知らないよって言われていますね。  Main.cpp には、Form4を宣言してあるLog_err.cpp(Log_err.h)をインクルードする事を宣言しまたか?  Main.cppの一番最初にいろいろ #includeの宣言があると思います。  そこに #include "Log_err.h" を書き加えてください。  Form21を使用しようとしているのに Form4なんて知らないって言われているのがよく分からないですが、とりあえずこれで解決出来ると思います。  参考になれば幸いです(..

bakuretsu
質問者

補足

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)
回答No.1

こんにちは、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が実行されます。  参考になれば幸いです(..

bakuretsu
質問者

補足

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』でも同じでした。

関連するQ&A

  • Borland C++ Compiler

    学校のC言語の授業で使用するので、Borland C++ Compilerをインストールしました。 今までに作ったプログラムや、教科書に載っていたサンプルプログラムをコンパイルして軽い勉強をしていたのですが、コンパイルの際にエラーが出るようになりました。 コマンドプロンプトでbcc32と打つと、パラメータのリストのようなものが出てくるので、-nなど適当にパラメータをつけて実行したら以下のようなエラーが出るようになりました。 Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland test.c: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照) objとtdsファイルは出力されるのですが、exeが出力されません。 どうやったらなおるか、教えてください。

  • Borland C++を利用しているのですが、簡単なプログラムが実行できません。

    Borland C++を利用しているのですが、簡単なプログラムが実行できません。 以下のようなプログラムをコンパイルして実行しようとしたのですが... #include <stdio.h> void main(void) { int i,j,k; i=1; j=2; k=i+j; printf( "k=%d,k); } Borland C++は、初めて使うのですが、C言語の勉強には使えないのでしょうか? もし使えるなら、どのようにすればよいのでしょうか?

  • C++Builderの選択

     いつも勉強させていただいています。どうぞよろしくお願いします。  今手元にあるアプリ(C++Builder5.0のソースコード付き)をいじりたく、 これを機会に初めてC++の勉強をしたいのですが(経験のある言語は Fortran、VBです)、C++Builderのどれを購入するかで迷っております。  ポイントとしましては、 ・上のC++Builder5.0のコードがコンパイル可能なもの  (先日、無料のBorland C++Compiler5.5をダウンロードしてコンパイルを試みても  できませんでしたorz (vcl.hというファイルが足りないようです)が、  C++Builderであればバージョン違いでもコンパイルできるのでしょうか?) ・書籍が比較的多いもの。(調べているとC++Builder6は比較的多そうな?気がしたのですが。。。) ・今後も暫く使えそうなもの。(C++Builder5 Personalとかかなり安いようなのですが、  皆さんもっと新しいもので開発なされているという事でしょうか。。。?) ・¥は7~8万くらいまで?  PersonalとProfessionalの違いや制限もよく分からないので、 もしお詳しい方がいらっしゃいましたら、ぜひ教えていただければと思います。  どうぞよろしくお願いします。

  • Borland C++ Compiler 5.5 無償

    Borland C++ Compiler 5.5 を無償ダウンロードして使おうとしましたが使えません gomi.cppを以下のように作り #include <stdlib.h> #include <stdio.h> #include <conio.h> int main(void) { fprintf("please help me!\n"); getch(); return 0; } binにおいてdosプロンプトから bcc32 gomi としたのですがエラーが出ます 統合開発環境でないので大変です この無償版を使えるようにするにはどうしたらいいのでしょうか? よろしくお願いします

  • VB.NET でのLaod/unLoad について

    VB6.0 には、Load/unload でのフォームを 読み込み、あるいは、開放(?)があったかと思います。 .NET以降は、調べたところ showメソッドか、 showDialogを使うみたいですが、いずれも 読み込みし終えて、Unloadするときはメモリからも 開放されるんでしょうか? あと、Load・Unloadのコードサンプルを ここで教えていただけないでしょうか。 乱文ですが、教えていただけると嬉しいです。

  • c++ , template , ファイル分割 , 助けてください...

    //-----------------coord.h------------- template <class type> class coord { type v[3]; public: coord(void); void Show(void); }; //-----------------main.cpp------------ #include<iostream> #include"coord.h" using namespace std; int main(void) { coord<double> ob; ob.Show(); return 0; } //----------------------coord.cpp----------- #include<iostream> #include"coord.h" using namespace std; template <class type> coord<type>::coord(void) { v[0]=v[1]=v[2]=0; } template <class type> void coord<type>::Show(void) { cout << "hello" << endl; } 同一フォルダ内に上記のファイルが 3 つあります. つまり上の 3 つのファイルを分割してコンパイルさせたいです. この状態で...MS-DOSプロンプトからコンパイルします. C:\test>bcc32 -c coord.cpp Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland coord.cpp: C:\test>bcc32 -c main.cpp Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland main.cpp: C:\test>bcc32 -emain main.obj coord.obj Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: 外部シンボル 'coord<double>::coord<double>()' が未解決(C:\USERS\TAITO\PR OG\CPP\TEST\MAIN.OBJ が参照) Error: 外部シンボル 'coord<double>::Show()' が未解決(C:\USERS\TAITO\PROG\CPP\TE ST\MAIN.OBJ が参照) すると, このようなエラー文が出てしまい 実行可能ファイルができません. コンパイラはbccです. 原因が全く分かりません. 助けてください... ちなみに, 分割せずにコンパイルすると通ります. 自分は c 言語での分割コンパイル経験はあるので それをそのまま c++ 言語でも用いているのですが, 何か変えなければならないのでしょうか?

  • C++2012でのフォーム切替

    いつも御世話になっております。 現在C++2012EXPRESSを使用し勉強を始めたばかりのものです。 早速質問なのですが、フォームの切替の仕方がわからず困っています。 #pragma once #include "Frm_Manual.h" ←追加 private: System::Void cmd_Manual_Click(System::Object^ sender, System::EventArgs^ e) { Frm_Manual^ form = gcnew Frm_Manual(); form->Show(); } 上記で追加したフォームを開く 上記の方法で追加したフォームを開くことが出来ました。 同様に追加したフォームからFrm_Mainを開きたいので #pragma once #include "Frm_Main.h" ←追加 private: System::Void cmd_Main_Click(System::Object^ sender, System::EventArgs^ e) { Frm_Main^ form = gcnew Frm_Main(); form->Show(); } とするとエラーが15個も発生してしまいます。 エラーはC2065,C2061,C2227の三種類です。 どこかでFrm_Main.hをインクルードする必要があると思うのですがどこに記入すればよいのかわかりません。 ネット検索もしたのですが、2つのフォームを交互に開くプログラムは検索できたのですが、現在行いたい処理は、フォームを5個作成し、切り替えるプログラムです。 VBでは簡単に出来たので、安易に考えていましたがつまいづいてしまいました。 よろしくお願いいたします。

  • C#でフォームアプリケーションを正しく終了させる方法

    VBでは  unload me で、フォームが終了して、アプリも終了しますが、 C#では、どのように記述したらよいのでしょうか? このあたりの知識レベルなので、参考になる書籍を探しております。何かよい本はございますか?

  • C++でprintfが使えない?

    学校の授業で「C言語を使ってある計算をせよ」というレポートが出ました。 Borland C++ Compiler 5.5無償版をインストールしました。 そしてWindowsXPのコマンドプロンプトでファイルを作り、udon.cppとしました。 C言語を使うのは久しぶりだったのでウォーミングアップとして簡単なプログラムを作っていこうと思い次のようなプログラムを組みました。 #include<stdio.h> main() { double x; x==3.22; printf("per= %lf\n",x); return 0; } そしてbcc32 udon.cppとしたのですが per=3.22 とは表示されずに Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland udon.cpp: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland としか表示されないのです! 何回やってもこうです。何がいけないのでしょうか? あと、あまり関係ないかもしれませんがレポートに必要なのでグラフィックス ライブラリ GLIBW32 というものもDLし設定してます。 どなたか教えていただけると幸いです。

  • C言語で他のプログラムの起動したいのですが。

     私は、VBのプログラマです。  この度C言語で簡単なプログラムを作りたいのですが、 そのやり方が分りません。  VBではSHELLで他のプログラムがを起動できるのですが、 C言語ではどうやって起動させれるのでしょう?  同期とか関係無しに起動だけさせたいのですが、それっぽい 命令が分らないので教えて下さい。