4

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
};
4

2 に答える 2