C言語初心者(に毛が生えた程度)です。
VBでしたら使えますし、コードが読めるので、
似たような(と言われた)Borland C++ Bulder4を
使用して、仕事でソフトを作ることになりました。
ところが、ヘルプを見ても良くわからないのですが、
VBでのShow&Unloadにあたる命令って何でしょう?
起動時にMainフォームを表示させておき、
各Clickイベントで別のフォームに切り替えるようにしたいのです。
(Main→Log
(他の機能は後日に完成ということです。)
本来なら独習すべきなのでしょうが、明日中に画面を完成させ、
お客にプレゼンすることになっているので、恥ずかしながら、
ここの知恵をお借りしたいのです。
どうかよろしくお願いします。
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で動作を確認)
これについては、ソースコードを見てみないと原因が分かりません。
色々原因を探ってみて分からない場合は、一服した後少し昔に戻ってみましょう。 今回のケースは根本的な部分なので最初まで戻ることになってしまいますが。
まずは今のプロジェクトファイルはおいといて、新しいプロジェクトファイルで簡単な骨組みを作成して動作を確認してみてはいかがでしょうか? そしてそれに肉付けしていき、こまめにコンパイル、実行をします。
その過程でエラーの原因が分かるかもしれないし、分からないまま今のプロジェクトファイルと同じ物が出来てしまうかもしれません。
かなり遠回りで時間のかかる作業ですが、急がば回れといいますようにどうしても原因が分からない場合は、これが有効な手段だと思います。
参考になれば幸いです(..
別のプロジェクトに1つずつ追加してコンパイルさせてみました。
どうもセーブエラーを起こしていたようで、Form1とForm21が
正常に保存されていなかったようです。
作成しなおしたらうまくいきました。ありがとうございました。
No.5
- 回答日時:
こんにちは。
>[リンカ エラー] Unresolved external 'TForm1::' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER4\PROJECTS\PROJECT1.OBJ.
ビルダーだと、Cソースと同名のヘッターファイルを勝手に作って、そこで、オブジェクトを宣言していますが、そちらに追加されていますか?
多分宣言がされていないのではないでしょうか。
そもそも、フォーム名は、Tform1ですか?
表示-オブジェクトインスペクタ(だと思う)
イベント タグ内に OnClick がありますので、そいつをダブルクリックしてみてください。(どこか、ウチ間違いかもしれません。)
なお、VBと違って、大文字・小文字が、厳しいですからねぇ・・・。(自動修正されません)
参考になれば。
でわ
下にも書きましたが、作りなおしで何とかなりましたが、
大文字小文字のミスが3箇所ほどありました。
ご注意頂いたので早期に発見できましたので、
関係ないかもしれませんが、お礼を一言。
ありがとうございました。
No.3
- 回答日時:
こんにちは、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.
困ったなぁ・・・
No.2
- 回答日時:
こんにちは、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.
と出ます。ヘルプを参照しても、メンバー関数を呼び出すかアドレスを指定してくださいって
クラスじゃなかったんでしょうか?それとも、まだ、凡ミスしてるのでしょうか?
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が実行されます。
参考になれば幸いです(..
この回答への補足
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- その他(Microsoft Office) エクセルのマクロについて教えてください。 5 2023/01/21 09:39
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- 会社・職場 アラフォーの女です。 現在の職場に在籍して6年以上になるのですが、 1年ほど経過したころから、辞めた 2 2022/12/13 22:40
- 哲学 日本語は 言語類型として あたかも始原のごとくである 3 2022/05/29 04:41
- Microsoft ASP ASP.NETや.NET、C#とかVBとか 2 2022/05/16 21:16
- 中学校 美術の成績で思考判断表現がCだったんですが... 6 2022/08/08 14:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
バッチからsqlplusの接続エラー...
-
適切な変換関数が存在しない???
-
Handlesについて
-
fortranでプログラムを実行する...
-
コンパイルできません。
-
sys/time.hのインクルードがで...
-
エラー: ‘inval’ の記憶サイズ...
-
エクセルでマクロを実行すると...
-
fatal error LNK1112
-
フォームの作成中にエラーが発...
-
ビルド失敗 指定されたファイ...
-
レコードセットをcloseする所で...
-
visual C++ でビルドの中止がで...
-
Excelのエラーで困ってます。
-
デバッグ中のエラーのことで教...
-
c言語をgcc.exeにコンパイルし...
-
MakeSureDirectoryPathExists
-
Fortran コンパイルエラーについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
適切な変換関数が存在しない???
-
Excelのエラーで困ってます。
-
バッチからsqlplusの接続エラー...
-
fortranでプログラムを実行する...
-
HEWを使用しているのですが、こ...
-
コンパイルできません。
-
デバッグ中のエラーのことで教...
-
visual C++ でビルドの中止がで...
-
BC30002: 型 'ListItem' が定義...
-
Handlesについて
-
sys/time.hのインクルードがで...
-
ビルド失敗 指定されたファイ...
-
VB2008で定数に色の設定をした...
-
RightとLeft関数のライブ...
-
multiple definitionというエラー
-
WindowsからLinuxへの移植
-
HANDLEの宣言でのエラー
-
レコードセットをcloseする所で...
おすすめ情報