从“void*”到“FILE*”的无效转换 - ROOT

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

我正在使用 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 行。

知道为什么会发生这种情况吗?

fprintf 期望 FILE*,而不是 ofstream。您不能以这种方式将 c 风格的打印函数与 c++ 流一起使用。

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

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

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

编辑:如评论中所述,myfile 隐式转换为 void*,因为 fprintf 需要一个指针。这就是为什么它抱怨 void* 而不是 ofstream.