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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

C++

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

解決済

implotライブラリを使ってとりあえず簡単なグラフの描画を行いたい.C++によるプログラム.

kaerazu
kaerazu

総合スコア1

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

C++

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

1回答

0リアクション

0クリップ

422閲覧

投稿2022/07/26 11:10

編集2022/07/26 12:21

前提

C++でグラフを描画できたらと思い,リンク先にあるImPlotというライブラリ( https://github.com/epezent/implot )を使って,リンク先のgithubの中でdemoとして公開されているような,正弦波のグラフと棒グラフを出力してみようと思い下のようなコードで"CMakeLists.txt"を書いて"cmake --build ."のコマンドでビルドしようとしたところ以下のようなメッセージが出ました.

ファイル構成に関しては以下のような感じです.
test_implot
| main.cpp
| CMakeLists.txt
├─build
└─imgui

buildに関してはwindowsのコマンドプロンプトでbuildファイル内に移動し,"cmake .."コマンドを実行後,続いて"cmake --build ."のコマンドを打ったというような状況です.

imguiファイルについてはimguiのライブラリ( https://github.com/ocornut/imgui )をクローンした後,implot
( https://github.com/epezent/implot )内のファイルをすべてコピペして貼り付けたものになります.

実現したいこと

・ImPlotを使ってとりあえず正弦波のグラフ,棒グラフをウィンドウに出力してみたい.

発生している問題・エラーメッセージ

CMake is re-running because C:/Users/PCUSER/Documents/cpp/test_implot/build/CMakeFiles/generate.stamp is out-of-date. the file 'C:/Users/PCUSER/Documents/cpp/test_implot/CMakeLists.txt' is newer than 'C:/Users/PCUSER/Documents/cpp/test_implot/build/CMakeFiles/generate.stamp.depend' result='-1' -- Configuring done -- Generating done -- Build files have been written to: C:/Users/PCUSER/Documents/cpp/test_implot/build Consolidate compiler generated dependencies of target plotTest [ 12%] Building CXX object CMakeFiles/plotTest.dir/main.cpp.obj [ 25%] Building CXX object CMakeFiles/plotTest.dir/imgui/implot.cpp.obj C:\Users\PCUSER\Documents\cpp\test_implot\imgui\implot.cpp: In function 'ImPlotTime ImPlot::MkGmtTime(tm*)': C:\Users\PCUSER\Documents\cpp\test_implot\imgui\implot.cpp:882:11: error: '_mkgmtime' was not declared in this scope; did you mean 'gmtime'? 882 | t.S = _mkgmtime(ptm); | ^~~~~~~~~ | gmtime C:\Users\PCUSER\Documents\cpp\test_implot\imgui\implot.cpp: In function 'tm* ImPlot::GetGmtTime(const ImPlotTime&, tm*)': C:\Users\PCUSER\Documents\cpp\test_implot\imgui\implot.cpp:893:7: error: 'gmtime_s' was not declared in this scope; did you mean 'gmtime'? 893 | if (gmtime_s(ptm, &t.S) == 0) | ^~~~~~~~ | gmtime C:\Users\PCUSER\Documents\cpp\test_implot\imgui\implot.cpp: In function 'tm* ImPlot::GetLocTime(const ImPlotTime&, tm*)': C:\Users\PCUSER\Documents\cpp\test_implot\imgui\implot.cpp:912:7: error: 'localtime_s' was not declared in this scope; did you mean 'localtime'? 912 | if (localtime_s(ptm, &t.S) == 0) | ^~~~~~~~~~~ | localtime C:\Users\PCUSER\Documents\cpp\test_implot\imgui\implot.cpp: In function 'void ImPlot::Locator_Time(ImPlotTicker&, const ImPlotRange&, float, bool, ImPlotFormatter, void*)': C:\Users\PCUSER\Documents\cpp\test_implot\imgui\implot.cpp:1232:68: warning: NULL used in arithmetic [-Wpointer-arith] 1232 | ftd.Time = t1; ftd.Spec = last_major_offset < 0 == NULL ? fmtf : fmt1; | ^~~~ C:\Users\PCUSER\Documents\cpp\test_implot\imgui\implot.cpp: In function 'tm* ImPlot::GetGmtTime(const ImPlotTime&, tm*)': C:\Users\PCUSER\Documents\cpp\test_implot\imgui\implot.cpp:900:1: warning: control reaches end of non-void function [-Wreturn-type] 900 | } | ^ C:\Users\PCUSER\Documents\cpp\test_implot\imgui\implot.cpp: In function 'tm* ImPlot::GetLocTime(const ImPlotTime&, tm*)': C:\Users\PCUSER\Documents\cpp\test_implot\imgui\implot.cpp:919:1: warning: control reaches end of non-void function [-Wreturn-type] 919 | } | ^ CMakeFiles\plotTest.dir\build.make:88: recipe for target 'CMakeFiles/plotTest.dir/imgui/implot.cpp.obj' failed mingw32-make.exe[2]: *** [CMakeFiles/plotTest.dir/imgui/implot.cpp.obj] Error 1 CMakeFiles\Makefile2:837: recipe for target 'CMakeFiles/plotTest.dir/all' failed mingw32-make.exe[1]: *** [CMakeFiles/plotTest.dir/all] Error 2 Makefile:119: recipe for target 'all' failed mingw32-make.exe: *** [all] Error 2

該当のソースコード

C++

#include "imgui/implot.h" #include <iostream> #include <math.h> int main() { static float xs1[1001], ys1[1001]; for (int i = 0; i < 1001; ++i) { xs1[i] = i * 0.001f; ys1[i] = 0.5f + 0.5f * sinf(50 * (xs1[i] + (float)ImGui::GetTime() / 10)); } static double xs2[20], ys2[20]; for (int i = 0; i < 20; ++i) { xs2[i] = i * 1/19.0f; ys2[i] = xs2[i] * xs2[i]; } if (ImPlot::BeginPlot("Line Plots")) { ImPlot::SetupAxes("x","y"); ImPlot::PlotLine("f(x)", xs1, ys1, 1001); ImPlot::SetNextMarkerStyle(ImPlotMarker_Circle); ImPlot::PlotLine("g(x)", xs2, ys2, 20,ImPlotLineFlags_Segments); ImPlot::EndPlot(); } }

CMakeLists.txt

cmake_minimum_required(VERSION 3.0.0) project(plotTest VERSION 0.1.0) include(CTest) enable_testing() add_executable(plotTest main.cpp imgui/implot.cpp imgui/implot_items.cpp imgui/imgui.cpp imgui/imgui_widgets.cpp imgui/imgui_tables.cpp imgui/imgui_draw.cpp) set(CPACK_PROJECT_NAME ${PROJECT_NAME}) set(CPACK_PROJECT_VERSION ${PROJECT_VERSION}) include(CPack)

CMakeLists.txtに関しては何とかネットで集めた知識を寄せ集めて書いたものです.もしかして,ここに問題があるのでしょうか?
ライブラリを使うのは初めてで,何とかbuildしようとしてたどり着いた結果がこれでした.

試したこと

implot.cpp ないで,time.h が include されていないのが原因かと思い,#include <time.h> を加えて同じ手順でbuildしようとしてみたのですがうまくいきませんでした.上記のエラーメッセージはtime.hのincludeを書き加えたうえで出力されたメッセージです.

補足情報(FW/ツールのバージョンなど)

windows 11 pro 21H2
VSCODE 1.69.2
C++17

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

kaerazu

2022/07/26 12:04 編集

一度,buildファイルを消して作り直し,buildファイル内で"cmake .." ,"cmake --build ."と順番に実行したところ,特にエラーメッセージなくbuildされるようになりました. しかし,buildファイル内に作られたDebug内にある実行ファイルを実行したところ一瞬コマンドプロンプトのウィンドウが表示された後,すぐに終了してしまいました.グラフはたぶん描画できていなかったように見えました.今のところ原因はわかっていないです. 実現したいことは相変わらず,"ImPlotを使ってとりあえず正弦波,棒グラフをウィンドウに出力してみたい"となっています.

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

C++

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