• 締切済み

付属プログラムを引用してもエラーが起きて困っています。

参考書に書かれてあるプログラムを書き写して練習してますが、 ビルドしたところ、参考書と同じなのにビルドエラーが起きます。 ちなみに、今参考にしているのは、 猫でも分かるゲームプログラミングです。 試しにその付属CDのプログラムを 外部ファイルの画像を描画するプログラムのcppごと まるまる移してもなぜかビルドエラーになります。 開発環境はVisual C++です。 開発環境が違えば製品についてくるプログラムでもエラーが 起きるのでしょうか? あと、猫でも分かるゲームプログラミングの他にC言語逆引き大全を持ってます。

  • proxi
  • お礼率27% (3/11)

みんなの回答

  • chie65535
  • ベストアンサー率43% (8516/19359)
回答No.2

>ビルドしたところ、参考書と同じなのにビルドエラーが起きます。 以下のどれかに該当する場合、ビルド出来る保障はありません。 ・筆者のコンパイラと読者のコンパイラが違う物である場合 ・筆者のコンパイラと読者のコンパイラが同じでもバージョンが違う場合 ・筆者のコンパイラと読者のコンパイラが同じでも動作設定が違う場合 ・筆者のライブラリと読者のライブラリが違う物である場合 ・筆者のライブラリと読者のライブラリが同じでもバージョンが違う場合 ・筆者のインクルードファイルと読者のインクルードファイルが違う物である場合 ビルドの成功が保障されるのは「筆者と読者のコンパイラ環境が100%同一である場合」に限ります。 なので「cppファイルごとコピー」しただけではダメです。 そのcppファイルが参照するヘッダーファイル、そのcppソースが利用するライブラリファイルの設定、そのcppファイルをコンパイルするコンパイラの設定、そのcppファイルをコンパイルするコンパイラ自身を、筆者の環境と同じにしなければいけません。 場合によっては「コンパイラやビルド環境を完全に一致させてもエラーが出る事」があります。 なぜなら「コンパイラ自身の動作環境が筆者と読者で異なる」からです。まったく同じパソコンを用意して、まったく同じソフトを入れ、100%同じ環境を作るのは不可能ですからね。

proxi
質問者

お礼

そうでしたか、 通りで、サーチエンジンで見つけた物や書き移したプログラムでは、 どうしても動かないわけですね。 本についているソフトをインストールして試してみます。

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

>参考書と同じなのにビルドエラーが起きます。 ビルド時に起きるエラーは1種類ではありません。 よって、あなたのところでは「何という」ビルドエラーが出ているかを 「具体的に」示す必要があります。

proxi
質問者

補足

何のエラーなのか、分からないので、 エラーが起きた時の画面をアップロードし、 プログラムをここに書いておきます。 #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); ATOM InitApp(HINSTANCE); BOOL InitInstance(HINSTANCE, int); char szClassName[] = "bitmap"; HINSTANCE hInst; int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLime, int nCmdSnow) { MSG msg; BOOL bRet; hInst = hCurInst; if (!InitApp(hCurlnst)) return FALSE; if(!InitInstance(hCurInst,nCmdSnow)) return FLASE; while((bRet = GetMessage(&msg,NULL,0,0))!=0){ if(bRet = -1){ break; } else { TranslateMessage(&msg); DispatchMessage(&msg); } } return(int)msg.wParam; } //ウィンドウクラスの登録 ATOM InitApp(HINSTANCE hInst) { WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst; wc.hIcon = (HICON)LoadImage(NULL, "../image/bitmap.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); wc.hCursor = (HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; //メニュー名 wc.lpszClassName = (LPCSTR)szClassName; wc.hIconSm = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); return (RegisterClassEx(&wc)); } //ウィンドウの生成 BOOL InitInstance(HINSTANCE hInst, int nCmdShow) { HWND hWnd; hWnd = CreateWindow(szClassName, "猫でもわかるゲームプログラミング", //タイトルバーに表示されます WS_OVERLAPPEDWINDOW, //ウィンドウの種類 CW_USEDEFAULT, //X座標 CW_USEDEFAULT, //Y座標 CW_USEDEFAULT, //幅 CW_USEDEFAULT, //高さ NULL, //親ウィンドウのハンドル、親を作るときはNULL NULL, //メニューハンドル、クラスメニューを使うときはNULL hInst, //インスタンスハンドル NULL); if (!hWnd) return FALSE; ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } //ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { int id, i, j; static int bmpw, bmph; static HDC hdc_mem; static HBITMAP hBmp; BITMAP bmp_info; HDC hdc; PAINTSTRUCT ps; RECT rc; switch (msg) { case WM_CREATE: hBmp = (HBITMAP)LoadImage(NULL, "cat.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); GetObject(hBmp, (int)sizeof(bmp_info), &bmp_info); bmpw = bmp_info.bmWidth; bmph = bmp_info.bmHeight; hdc_mem = CreateCompatibleDC(NULL); SelectObject(hdc_mem, hBmp); break; case WM_PAINT: GetClientRect(hWnd, &rc); hdc = BeginPaint(hWnd, &ps); for (i = 0; i * bmpw <= rc.right; i++) { for (j = 0; j * bmph <= rc.bottom; j++) { BitBlt(hdc, i * bmpw, j * bmph, bmpw, bmph, hdc_mem, 0, 0, SRCCOPY); } } EndPaint(hWnd, &ps); break; case WM_CLOSE: id = MessageBox(hWnd, "終了してもよろしいですか", "確認", MB_YESNO | MB_ICONQUESTION); if (id == IDYES) DestroyWindow(hWnd); break; case WM_DESTROY: DeleteObject(hBmp); DeleteDC(hdc_mem); PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, msg, wp, lp)); } return 0; }

関連するQ&A

  • 複数ファイルのビルド方法(緊急)

    19歳のアフィリエイターです。 現在CやCPPファイルを使ってゲームマシンのエミュレーターの開発を行っています。 プログラミングの方は完成したのですが、 2階層までのディレクトリからなる複数のCやCPPファイルから、 肝心のEXEファイル(実行ファイル)を作成するビルドの方法が、分からなくて物凄く困っています。 インターネットでいくら探し回っても、一向に複数のファイルをビルドする方法が分かりません。 どなたか複数のファイルをビルドして、実行ファイルを作成する手立てを教えてください。 開発にはMicrosoft Visual C++ 2010とテラパッドを使っています。

  • 粒子法プログラムのビルドエラー(cstdlibのエラー)

    粒子法のMPS法のプログラミングをしているのですが、C++でmps.cをビルドをすると、cstdlibのエラーが出てビルドが出来ません。 mps.cの本文中にはエラーは無く、visual studio 9.0にあるcstdlibの構文エラーが出てしまいます。 最初から入っているライブラリファイルが間違っているとは思えません。 解決法を教えてください。お願いします。 ↓ mps.c内でcstdlibを使っている場所 ↓ #include <cstdlib> /* This line is necessary for C++ compiler. Remove this line in C compiler */ #include <stdio.h> #include <sys/types.h> #include <math.h> #include <string.h> ↓ エラーメッセージ ↓ 1>コンパイルしています... 1>mps.c 1>c:\program files\microsoft visual studio 9.0\vc\include\cstdlib(21) : error C2143: 構文エラー : '{' が ':' の前にありません。 1>c:\program files\microsoft visual studio 9.0\vc\include\cstdlib(21) : error C2059: 構文エラー : ':' 1>c:\program files\microsoft visual studio 9.0\vc\include\cstdlib(21) : error C2143: 構文エラー : '{' が ':' の前にありません。 1>c:\program files\microsoft visual studio 9.0\vc\include\cstdlib(21) : error C2059: 構文エラー : ':' 1>c:\program files\microsoft visual studio 9.0\vc\include\cstdlib(21) : error C2143: 構文エラー : '{' が ':' の前にありません。 1>c:\program files\microsoft visual studio 9.0\vc\include\cstdlib(21) : error C2059: 構文エラー : ':' 省略(21行目のエラーが23~32行目まで同じエラーが続く) 1>MPS3000 - エラー 62、警告 0 ========== すべてリビルド: 0 正常終了、1 失敗、0 スキップ ==========

  • visual studio 2012エラー

    前使っていたPCで作成したプロジェクトを新しいPCに移動してビルドしてみると 2>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.Cpp.Platform.targets(42,5): error MSB8020: The builds tools for Visual Studio 2010 (Platform Toolset = 'v100') cannot be found. To build using the v100 build tools, either click the Project menu or right-click the solution, and then select "Update VC++ Projects...". Install Visual Studio 2010 to build using the Visual Studio 2010 build tools. というエラーが出ます。 わかる方いますでしょうか?

  • 他人のプログラムを実行すると、「実行できません」のエラーが出ます

    VisualC++初心者です。 移植のため、他人のプログラムをそのまま貰って解析しろと言われています。 ところが、そのままビルドして実行しても、ビルドでエラーは出ないのですが、「プログラムを実行できません」メッセージが出てしまいます。ステップ実行しようとすると、「*.exeファイルが見つかりません。」エラーが出ます。 リソースでSDIのDialogBoxを持っていますが、ソースはすべて拡張子.cで.cppファイルは有りません。 とっかかりが掴めず困っています。 どうすれば実行できるようになるでしょう?

  • Visual Windows for BC++ のサンプルプログラムがエラーになる

    Visual Windows for BC++ をインストールした直後に、新しいプロジェクトをwindows型でつくり、サンプルプログラムをビルドしたところ、うまく実行ファイルができ、正常に動作しました。 次に、OpenCVを http://nautilus.cs.miyazaki-u.ac.jp/~yoshi/pukiwiki/index.php を参考にダウンロードして、 インクルードファイルの検索パスに3つ: C:\Program Files\OpenCV\cv\include、C:\Program Files\OpenCV\cxcore\include、C:\Program Files\OpenCV\otherlibs\highgui ライブラリファイルの検索パスに1つ:C:\Program Files\OpenCV\lib を追加しました。 OpenCVのサンプルプログラムをビルドしようとしたのですがエラーになり先に進みません。それどころか、インストール直後にビルドできたサンプルプログラムもエラーが出るようになってしまいました。 エラーが発生したため、brc32.exe を終了します。 となります。 コンパイルも、以下の警告が出るようになってしまいました。 私の設定が悪いのでしょうか、それとも、Visual Windows for BC++では、OpenCVは扱えない ということでしょうか? よろしくお願いします。 Visual Windows for BC++, Copyright (c) 2003-2007 M. Yasue: proj1.exe ビルド実行中..... Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland ..\hello.cpp: 警告 W8060 ..\hello.cpp 30: おそらく不正な代入(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) ) 警告 W8057 ..\hello.cpp 41: パラメータ 'hPrevInstance' は一度も使用されない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) ) 警告 W8057 ..\hello.cpp 41: パラメータ 'lpCmdLine' は一度も使用されない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) ) 警告 W8057 ..\hello.cpp 95: パラメータ 'message' は一度も使用されない(関数 __stdcall OnPaint(HWND__ *,unsigned int,unsigned int,long) ) 警告 W8057 ..\hello.cpp 95: パラメータ 'wParam' は一度も使用されない(関数 __stdcall OnPaint(HWND__ *,unsigned int,unsigned int,long) ) 警告 W8004 ..\hello.cpp 130: 'wmEvent' に代入した値は使われていない(関数 __stdcall WndProc(HWND__ *,unsigned int,unsigned int,long) ) 警告 W8057 ..\hello.cpp 183: パラメータ 'lParam' は一度も使用されない(関数 __stdcall About(HWND__ *,unsigned int,unsigned int,long) ) Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland リソースファイルコンパイル・リンク実行中..... Borland Resource Compiler Version 5.40 Copyright (c) 1990, 1999 Inprise Corporation. All rights reserved. 終了.....

  • スケルトンプログラムをビルドできません

    Windowsプログラミングの基礎、スケルトンプログラムを ビルドできなくて困っています。 以前Borland C++ compiler 5.5を使っていたときは ビルドできていたのですが、昨日Visual Studio 2005を購入し、 テストでビルドしようとしたところ 次のようなエラーが出てしまいました。 error C2664: 'CreateWindowExW' : 2 番目の引数を 'char [13]' から           'LPCWSTR' に変換できません CreateWindow関数の第二引数を "Sample Program"というふうにしています。 UNICODEが関係しているらしいというところまでは 分かったのですが、具体的にどのように コーディングしてよいのか、まだ分かりません。 初歩的な質問で申し訳ないですが、よろしくお願いします。

  • gdiplus.dllを使わないプログラム開発

    はじめまして、 ”Microsoft Visual C++ 2008”にてダイアログベースのプログラムを書いています。 windows2000に対応するために、gdiplus.dllを使用しないプログラムを作成したいのですが、 新規作成したプロジェクトをそのままビルドしただけでもgdiplus.dllが読込まれてしまいます。 読込まなくするには、どのように設定を行なえばよいのでしょうか。 それとも”Visual C++ 2008”ではgdiplus.dllを使用しないダイアログベースのプログラム開発は不可能なのでしょうか。 動作対象OS:win2000(SPなし)以降 開発環境: 言語:Visual C++ 2008(visual studio 2008 professional edition) テンプレート:MFCアプリケーション アプリケーションの種類:ダイアログベース 以上、よろしくお願いいたします。

  • Visual basicビルド時のError

    現在、Visual basicを用いて、プログラミングを行っています。 Fortranの本を参考に、プログラミングを 行ったのですが・・・・ ビルド後に以下のようなエラーがでました。↓ Error: Unrecognized token '?' skipped プログラミングは初心者です。 とても、基本的なことだと思うのですが、回答よろしくお願いします。

  • Visual C++に挑戦してみたのですが、ビルドしたら画面が消えます。

    Visual Studio .net ver2003+WinXPの環境です。 C++に挑戦をたった今始めたばかりでしょっぱなで つまずいているヘボビギナーです。 質問なのですが、 http://www.plustarnet.com/aspil/Programming/c02.htm を見ながら以下のソースをビルドしたのですが、 画面が一瞬で消えてしまいます。 これが正常なのでしょうか? WEBサイトの解説では消えていないのですが・・・。 あと、開発画面は、Visual C++[デザイン] first.cppとなっています。 この様な質問の仕方でいいのかすら分かりかねますが、 もし、説明不足または聞き方がおかしかったらすみません。 どうぞ宜しくお願い致します。 【ソース】 #include <stdio.h> void main(void) { printf("0からのゲームプログラミング\n"); }

  • このエラーの対処法を教えて下さい。

    Visual C++ 2005 Express Edition で、DXライブラリを使ったプログラムをコンパイルすると、 「kamakiri1.cpp(206) : fatal error C1075: 左側 中かっこ '{' に対応するものが 'c:\documents and settings\□\my documents\visual studio 2005\projects\newgame\kamakiri1.cpp(21)' で見つかる前に EOF が検出されました。」と出たのですが、これはどういうエラーなんでしょうか。

専門家に質問してみよう