2017-05-17 47 views
-2

ImGui & SDL2のセットアップ方法に関する実際のチュートリアルがないので、私はここで答えを見つけるために来ました。ImGui、SDL2&codeブロック、セットアップに苦労

ImGuiファイルを私のインクルードフォルダに貼り付けてセットアップするだけでいいですか?少なくとも、それはImGuiのreadmeファイルが言っているものです。

私はこれを試して

ImGui::Begin("test"); 

私はこのエラーを持っている:

undefined reference to `ImGui::Begin(char const*, bool*, int) 

コードブロックは、私が '私' を書き始めるときImGui機能で私を自動入力ください。また、他のファイル(ImGui_drawなど)を#includeしても、私は再定義の問題しかありません。だから、この質問を閉じないでください

What is an undefined reference/unresolved external symbol error and how do I fix it? 

は=>それはなぜ異なるの私の質問のSISライティは、すでに次の質問に答えています。私は今2日から解決策を探しています。ここでの質問は私の唯一の解決策です。この質問が終了したら私はImGuiをあきらめなければならない。私は本当に無知だ。

このエラーは、SDL2のOpenGLとの競合が原因である可能性がありますか?しかし、この場合、代わりにプログラムがクラッシュすべきではないでしょうか?

はEDIT:今、このエラーが解決される(私は含まれたフォルダに自分自身にファイルを含めるIDEで動作するように使用さ、私は、コードブロックがしなかった知っていませんでした)、私は私のプログラムの起動を持っていますしかしImGuiに関連する何も起こらない(予想通り、私はSDL2 & ImGuiを混在させる方法をまだ考え出していなかった)、私は私のSDL2ウィンドウ終了時に別のエラーは今起こる:

プログラムがクラッシュをし、で次のように表示されますコンソール:

Assertion failed: g.Initialized, file C:\(...)\imgui.cpp, line 3882 

いくつかのランダムな精巣:私はメインループの前にImGuiを使用すると、そこでクラッシュします。ループ内で同じです。 imgui's READMEから引用

+4

[定義されていない参照/未解決の外部シンボルエラーとは何か、それを修正する方法は?](http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-外部記号エラーと方法i-fix) – UnholySheep

+0

私の質問をもう一度読んでください。問題はエラーそのものではありません。問題は、たとえコードブロックがファイルを見つけたとしてもエラーが表示されることです。 –

+2

リンクされた複製はここで有効です。あなたのIDEが上記のようにコードを完成させても問題ありませんが、まだ未定義の参照があります。彼らは2つの別々のものです。重複する質問で説明されているC++構築プロセスを正しく理解していれば、問題を解決する可能性はほぼ確実です。 – johnbakers

答えて

1

ImGuiファイルを自分のインクルードフォルダに貼り付けてセットアップするだけでいいですか?

いいえヘッダーファイルは、アプリが有効なコンパイルのためにどのような記号が表示されているかを確認するために必要です。しかしリンク中には、実際にそれらのシンボルがそこに存在する必要があり、単一のヘッダファイルを追加することはそれらを追加することはありません。すべてのソースファイル(cppファイルとそれに対応するヘッダーファイル)をあなたのアプリケーションに持っていって一緒にコンパイルする必要があります。

C++アプリケーションをビルドするには、2つの主要段階があります:コンパイルとリンク。ヘッダーパスには、コンパイル段階のすべての情報が含まれていますが、リンクするための情報はありません。実際のソースファイル(ヘッダーファイルではない)には、ヘッダーに宣言されているものを定義するために必要なシンボルを含めることができます。それらも追加しないと、シンボルが定義されていないため、エラーが説明されます。

コードブロックは、私が 'i'と書き始めたときにImGui関数で自動入力しますか?

これは、プロセスの一部であるヘッダーファイルが含まれているためです。

私は再定義の問題しかありません。

これを行う場合には、#includeには.cppファイルを使用せず、ヘッダーファイルのみを使用してください。 #includeを複数の場所に#includeすると、指示どおりに複数の定義エラーが発生します。

+0

"ソースファイル"とは、 ".cpp"を意味しますか?はい、私がそれらを含めると、彼らはまた私に "再定義の問題"を与えます。 noの場合、imguiは.cppと.hファイルのみを与えます。道に迷いました。 –

+1

#ソースファイルを#含まないでください。プロジェクトに追加するだけですが、#includeは使用しないでください。また、「ソースファイル」という言葉はヘッダーファイルではなく、.cppファイルを指します。 – johnbakers

+0

ファイルを追加しましたが、エラーはなくなりました!しかし、プログラムが起動しても、ImGuiには何も起こりません。私はこのメッセージを持っています。「アサーションが失敗しました:g.Initialized、ファイルC:\(...)\ imgui.cpp、3882行」これは答えとして、新しい質問を開きますか? –

0

  • imgui.cpp
  • ImGuiは、あなたが簡単に をコピーして、アプリケーション/エンジンにコンパイルすることができますいくつかのファイルの中に自己完結型でありますimgui.h

  • imgui_demo.cpp
  • imgui_draw.c (デフォルトでは空、ユーザーが編集可能)PP
  • imgui_internal.h
  • imconfig.h
  • stb_rect_pack.h
  • stb_textedit.h
  • stb_truetype。時間

だから、あなただけimgui.hヘッダーを必要としない、あなたの実行可能ファイルにcppファイルをコンパイルとリンクの世話をして、これらのファイルのすべてを必要とします。

+0

@SanchezTanguy 'ImGui :: Begin'は' imgui.cpp'で定義されているので、必要なファイルをコンパイルしてリンクしませんでした。 – Quentin

+0

imgui.hを追加すると、すべてがリンクされます!私は今どこかにいる^^しかし、私はまだエラーがあり、そこには全く同じ定義があります:再定義。どうすればこのことに乗ることができますか? –

+0

@SanchezTanguyどのシンボルが複数定義されていますか? – Quentin