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

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

本文关键字:转换 ROOT 无效 void FILE      更新时间:2023-10-16

我使用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>。有关流操作符的列表,请参阅本页。

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