質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

2597閲覧

C++,DxLibでコンパイルできない。(LNK1104)

reddo

総合スコア5

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/03/08 11:12

前提・実現したいこと

C++言語で簡易的なゲーム作成

ここに質問の内容を詳しく書いてください。C++```ここに言語を入力
コード

最初は予定通りにプログラムが動くものの、二回目にコンパイル を行うと、コンパイルに失敗します。実行ファイルが生成できないという エラーメッセージが出ます。 タスクマネージャーを覗くと前の実行ファイルが残っていて 消すとコンパイル可能になり、エラーメッセージは出ません。 しかし、少しでもプログラムを変更すると同様のエラーメッセージ が出現し、コンパイル失敗します。 つまり、新たにコンパイルを行うと前の実行ファイルが消去できず 新たに実行ファイルが生成できないことが原因だと考えていますが なぜ、新たにコンパイルを行うと前の実行ファイルが消去出来ないか 分かりません。 どなたかお願いいたします。 (言語:C++ ,コンパイラー: visual stdio 2019) ### 発生している問題・エラーメッセージ LNK1168 実行ファイル名.exeを開いて書き込むことができません。 ### 該当のソースコード #include "DxLib.h" int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){ ChangeWindowMode(TRUE); // ウィンドウモードに設定 DxLib_Init(); // DXライブラリ初期化処理 WaitKey(); // キー入力待ち int title, background; int white = GetColor(255,255,255); //int a = 1 < 2 * 3; title = LoadGraph("picture/title.jpg"); background = LoadGraph("picture/background.jpg"); ClearDrawScreen(); DrawGraph(0, 0, title, TRUE); ScreenFlip(); DrawFormatString(0, 0, white, "エンターキーを入力して下さい。"); while (1) { ProcessMessage(); if (CheckHitKey(KEY_INPUT_NUMPADENTER) == 1) break; } ClearDrawScreen(); DrawGraph(0, 0, background, TRUE); ScreenFlip(); while (1) { ProcessMessage(); if (CheckHitKey(KEY_INPUT_ESCAPE) == 1) break; } DxLib_End(); // DXライブラリ終了処理 return 0; } ### 試したこと #include "DxLib.h"を使わず 標準的な入出力関数#include <stdio.h> の場合エラーメッセージは出ませんでした。 つまり、 #include "DxLib.h"起因の可能性が高いです。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

、新たにコンパイルを行うと前の実行ファイルが消去できず

新たに実行ファイルが生成できないことが原因

ではありません。順序が違います。
起こっていることは

  • 最初にコンパイル/ビルドを行う
  • 実行ファイルが生成される
  • 実行する -- 実行中は実行ファイルがロックされ、消去不能になる
  • プログラムを終了しないまま、次のコンパイル/ビルドを行う
  • 実行中の古い実行ファイルがロックされているので新しい実行ファイルの生成に失敗する
  • 結果、ビルドに失敗する

ということです。実行ファイルを確実に終了させてから、次のコンパイル/ビルドを行ってください。

投稿2020/03/08 11:22

thkana

総合スコア7703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

reddo

2020/03/08 11:44

回答して頂きありがとうございます。 勘違いしていました。 ただ、必ずプログラムは終了(コンソール画面を右上の×を押して消す) してからコンパイルを行っています。 実行ファイルを終了する=コンソール画面を右上の×を押して消す ではないということでしょうか? 毎回、タスクマネージャを開き、実行ファイル名.exeを消すと コンパイル成功しますが…
Bull

2020/03/08 12:01 編集

メッセージ処理をしていない(ProcessMessage()のリターンコードを処理していない)ので、ウィンドウを閉じても、プログラムは終了しません。 ループの作り方がちょっと変ですが、それは良いとして、ウィンドウを閉じないでリターンキーと ESC キーを入力することでプログラムを終了することはできると思います。 DXライブラリのプログラムのサンプルはたくさんあります。それらを参考にしてみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問