gnuplot を使用して、結果をコンソール アプリケーション (C++、Eclipse CDT、Linux) にプロットしたいと考えています。簡単にするために単純なクラスを作成しました (以下のコードを参照)。メインでテストプロットをプロットしようとしています:
int main() {
Gnuplot plot;
plot("plot sin(x)") ;
cout<<"Press button:";
cin.get();
return 0;
}
私の問題は、アプリケーションを通常どおり起動すると、「wxWidgets の初期化に失敗しました。ライン plot("plot sin(x)") を実行した後のセグメンテーション違反 (コア ダンプ)。ただし、デバッグ モードで行をステップ実行すると、コードは正常に動作し、プロット ウィンドウは期待どおりに正弦波で表示されます。どんな助けでも大歓迎です。
#ifndef GNUPLOT_H_
#define GNUPLOT_H_
#include <string>
using namespace std;
class Gnuplot {
public:
Gnuplot() ;
~Gnuplot();
void operator ()(const string & command); // send any command to gnuplot
protected:
FILE *gnuplotpipe;
};
#endif
そしてソース:
#include "gnuplot.h"
#include <iostream>
#include <string>
#include "stdio.h"
Gnuplot::Gnuplot() {
gnuplotpipe=popen("gnuplot -persist","w");
if (!gnuplotpipe) {
cerr<< ("Gnuplot not found !");
}
}
Gnuplot::~Gnuplot() {
fprintf(gnuplotpipe,"exit\n");
pclose(gnuplotpipe);
}
void Gnuplot::operator()(const string & command) {
fprintf(gnuplotpipe,"%s\n",command.c_str());
fflush(gnuplotpipe);// flush is neccessary, nothing gets plotted else
};