C++の読み込み例題で未定義のシンボルエラーが出る

このQ&Aのポイント
  • C++の参考書に載っている読み込みの例題で、未定義のシンボルエラーが発生します。
  • エラーメッセージは「Opendialog1が未定義のシンボルです」と表示されます。
  • このエラーを解決するには、OpenDialog1の定義を確認し、適切なライブラリをリンクする必要があります。
回答を見る
  • ベストアンサー

builder c++

参考書に載っている読み込みの例題なんですが、 void__fastcal1 TForm1:: Button1Click(TOject*sender) { OpenDialog1->Execute(); ifstream fin; fin.open(OpenDialog1->FileName.c_st5r()); if(!fin){ ShowMessage(""); exit(1); } ....... } で実行するとエラーで"未定義のシンボルOpendialog1"と出てきてうまくいきません。どうすればうまくいきますか?

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

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

OpenDialog コンポーネントをフォーム上に貼り付けてありますか?

volkasiste
質問者

お礼

そうでした。 コンポーネントの貼り付けを忘れていました。 無事に動作しました。 ありがとうございました。

その他の回答 (1)

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.1

> 実行すると コンパイル時ですか? > 未定義のシンボルOpendialog1 正確にこの内容ですか?だとすると、 dialog の d は大文字ではありませんか?

volkasiste
質問者

補足

はい、コンパイル時です。 あとエラーの内容は間違いで大文字のDでした。

関連するQ&A

  • C++で指定文字列のカウント方法(テキストマイニング)

    大学でC++ builder を使った授業を受けておりましたが、いつも早く終わっていた(教科書を写すだけなのでタイピングが早ければすぐ終わる)のをC++が得意と勘違いされ、試験を免除する代わりにテキストマイニングに関連するソフトを作るという課題を言い渡されました。 テキストマイニングの意味は大体理解し、掲示板などからとってきたテキストデータの中にある「美味しい」と「不味い」の文字列の個数を数え上げるプログラムを作ろうと考えていますが、やり方が全くわかりません。授業では「学生のためのC++builder」という主に数値計算を扱った教科書の例題を実行するというもので、テキストデータの扱い方はほぼまったくしていません。 今までにやった中でファイルを扱ったようなものとしては void __fastcall TForm1::Button1Click(TObject *Sender) { OpenDialog1->Execute(); //入力ファイル用ストリームのオブジェクト(fin)を生成する ifstream fin; fin.open(OpenDialog1->FileName.c_str()); //エラー対策 if(!fin){ ShowMessage("ファイルのオープンに失敗しました!!"); exit(1); } double sintyo; char name[20]; //ファイルから氏名、身長データを読み込む fin>>name>>sintyo; while(!fin.eof()){ StringGrid1->Cells[0][n]=(String)name; StringGrid1->Cells[1][n]=FormatFloat("###0.0",sintyo); data[n]=sintyo; n++; fin>>name>>sintyo; } fin.close(); } だけであり、それを元にして改良するということができそうにありません。 最初からチェックしていって、「美味い」など指定文字列があればdに1を加えるなど、アルゴリズムを考えること自体はできるとは思います。 しかも期限は一週間となっています。 どなたか方法をお教えいただけませんでしょうか。

  • AVIファイルを読み込む方法

    C++でプログラミング中の者です。 使っているコンポーネントはanimate、MediaPlayer、Edit、Botton、OpenDialogです。 OpenDialogで選択したファイル名をEditに表示させ、Mediaplayerを使ってAnimateに表示させるプログラミングをしたいと思っています。 なかなかうまくいかないので、アドバイスお願いいたします。 次のは現在のプログラムです。 #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { //OpenDialog1->DefaultExt = "AVI"; //OpenDialog1->FileName = "*.avi"; if(OpenDialog1->Execute()==true){ // ファイル名が選択されたときに実行する処理  Edit1->Text=OpenDialog1->FileName; //Edit1に選択したファイル名を表示 //Animate1->Active=LoadFromFile(OpenDialog1->FileName); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit1Change(TObject *Sender) { MediaPlayer1->Open(); MediaPlayer1->Play(); } //---------------------------------- よろしくお願いします。

  • OpenDialogからテキストファイルの読み込み

    void __fastcall TForm1::N1Click(TObject *Sender) {     FILE *fp;      if(OpenDialog1->Execute()) { FNN1 = ExtractFilePath(OpenDialog1->FileName)         fp = fopen(FNN1.c_str(), "r" );              fread(txtdata,2,360,fp); } } [C++ エラー] Unit1.cpp(52): E2034 'AnsiString' 型は 'void *' 型に変換できない というエラーがでます。 解決方法を教えてください。

  • BorlandC++Builder5.0でリンカエラー

    現在A/D変換ボードの制御をしようとしています。 ボードのインストールも行なったのですが、以下のエラーが出て困っています。 外部シンボル 'AdOpen' が未解決(C:\PROGRAM FILES\BORLAND\CBUILDER5\PROJECTS\MAG\MAIN.OBJ が参照)と出てしまいます。 mainはシンプルなのですが... void __fastcall TForm1::OpenDevClick(TObject*Sender) { device_handle = AdOpen("FBIAD1"); if(device_handle == INVALID_HANDLE_VALUE){ ShowMessage("Err : デバイスのオープンに失敗"); return; } } そもそもこのエラーはなぜ出るのですか?

  • ifstream/ofstream について

    こんにちは。 よろしくお願いいたします。 ifstream で定義したファイルを open し、一端 close した後再度 open しようとすると、エラーとなります。 何が原因かわかりますでしょうか? ちなみに、インファイル.txt は何も記載していないので、下記ソースのwhileループ内には入りません。 が、whileループが有ればエラー(メッセージ:3103)が発生し、 無ければ、エラーは発生しません。 環境:XP home & ボーランドC++Builder6.0 テストしたソース: void __fastcall TForm1::Button6Click(TObject *Sender) { ifstream InFile; ofstream OutFile; char cBuf[255]; InFile.open("インファイル.txt"); if (!InFile) ShowMessage("3101"); OutFile.open("アウトファイル.txt"); if (!OutFile) ShowMessage("3002"); while (!InFile.getline(cBuf, sizeof(cBuf)).eof()) { OutFile << cBuf << endl; } // このwhileループが無ければ、エラーは発生しません。 OutFile.close(); InFile.close(); InFile.open("インファイル.txt"); if (!InFile) ShowMessage("3103"); // ここでメッセージが出力されます。 }

  • C#プログラムにて

    C#プログラムにて お世話になります。 C#初心者です。 プログラムコードを書き始めで、早速行き 詰っています。 ステップでコードの動きを確認したところ、 program.csのMainから下記のForm1.csに 移りForm1のデザイナが表示されるのですが、 button3を押してもForm3が表れません。 また、ステップの黄色いカーソルと言いますか ステップの位置情報も消えています。 何がどう悪いのか分からなく困っています。 どなたかご親切な方、ご教授頂きたく 宜しくお願い致します。     記 using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication3 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button3_Click(object sender, EventArgs e) { Form3 cForm3 = new Form3(); cForm3.ShowDialog(); } private void button2_Click(object sender, EventArgs e) { DialogResult ans; ans = MessageBox.Show("最新のコード表を照会しますか?", "Microsoft Visual Studio", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (ans == DialogResult.OK) Application.Exit(); } private void button12_Click(object sender, EventArgs e) { Form4 cForm4 = new Form4(); cForm4.ShowDialog(); } } }

  • C++builderにおけるwhile()の使い方

    はじめまして、当方プログラムの初心者ですのでわかりづらい質問をしていますかもしれませんがよろしくお願いします. (質問)Borland C++ Builderを使っています。現在困っている点は単純に説明します.プログラムではウィンドウ上のボタンを押したというイベントが起きるとwhile()の無限ループに入るようになっています.このままだと実行したときにフリーズしてしまうのでwhile内にApplication->ProcessMessageを入れてあります. void __fastcall TMain_Form::Button1Click(TObject *Sender) {  while(1){ Application->ProcessMessage .............. } } このようなwhile突入ボタンがひとつのときはいいのですが、複数のボタンを作って、それぞれに対応するwhileを実行したいのですが、どうしてもひとつだけ動いて他が止まってしまいます. どなたか無限ループをマルチスレッドで複数、回らせる方法を教えてください. また、なんでもかんでもProcessMessageをいれてやればWINMAINに処理が移って、マルチスレッドになると思って使っているのですが間違いでしょうか? よろしくお願いします.

  • delphi paintbox.invalidate

    ターボdeliphiのPaintBoxです procedure TForm1.Button1Click(Sender: TObject); begin PaintBox1.Invalidate; PaintBox1.Canvas.MoveTo(0,0); PaintBox1.Canvas.lineTo(100,100); end; procedure TForm1.Button2Click(Sender: TObject); begin PaintBox1.Canvas.MoveTo(0,0); PaintBox1.Canvas.lineTo(100,100); end; procedure TForm1.PaintBox1Paint(~~~~~ ボタン1でlineTo(100,100)は描画されず、ボタン2では描画されます。 つまりPaintBox1.Invalidateで再描画させている微妙なタイミングのせいでしょうか? 再描画が終了してからlineTo(100,100)を描画したいのですが、それを知るコマンド?関数?はありますか?

  • 開いているアプリをactivateするFindWindowの戻り値について

    FindWindow のreturnValue が、開いているNotePad の場合はちゃんと、0以外の値が戻ってきますが、他のアプリで試しても0しか戻ってきません。はて、どうしてなのでしょうか?MsPaint,WordPad、あるいは自作のアプリ.exe どれもだめです。御教示をお願いいたします。Delphi 6, Windows98 procedure TForm1.Button1Click(Sender: TObject); var hMemo:HWND; begin hMemo := FindWindow('Notepad',nil); if hMemo <> 0 then SetForegroundWindow(hMemo) else ShowMessage('メモ帳が見つかりません'); end;

  • C#イベント中の戻り値の設定の仕方を教えてください

    public void button6_Click_1(object sender, EventArgs e) { double a; a = 1.0; } 上記のプログラムでaを戻すにはどうしたらいいですか? voidをdoubleに変えてreturn a;などいろいろ試しているのですがうまくいきません教えてください。 よろしくお願いします。 また、a,bと複数の値を返すにはどうしたらいいですか?

専門家に質問してみよう