无效转换为'void *'到'FILE *' - ROOT

时间:2016-08-24 07:44:29

标签: c++ compiler-errors printf root-framework

我正在使用cern的数据分析框架ROOT。我想要做的是在ascii文件中导出TH1F直方图的内容。我的示例代码如下

#include "TH1.h"
#include "TH1F.h"

#include <iostream>
#include <fstream>
using namespace std;

void histo2ascii(TH1* hist){

    ofstream myfile;
    myfile.open ("movie_small.txt");

    for (int i=1; i<=hist->GetNbinsX(); i++){
        if(hist->GetBinCenter(i)>5.e-3 && hist->GetBinCenter(i)<7.e-3){
            //myfile << (float) hist->GetBinCenter(i) << "\t" << hist->GetBinContent(i) << endl;
            fprintf(myfile, "%.17g \t %d", hist->GetBinCenter(i), (int) hist->GetBinContent(i));
        }
    }

    myfile.close();

}

问题是,当我编译它时(好的,通过cint,使用.L code.C ++:/)我得到以下错误

  

invalid conversion from ‘void*’ to ‘FILE*’

fprintf行。

有关为何会发生这种情况的任何想法吗?

1 个答案:

答案 0 :(得分:1)

fprintf需要FILE*,而不是ofstream。您不能以这种方式将c-style打印功能与c ++流一起使用。

像在fprintf行上方注释掉的行中一样使用流。如果要设置精度,请使用:

myfile << std::setprecision(2) << hist->GetBinCenter(i).

不要忘记包含<iomanip>。有关流操作符的列表,请参阅this page

编辑:正如评论中所提到的,myfile被隐式转换为void*,因为fprintf需要指针。这就是为什么它抱怨void*而不是ofstream