我正在使用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
行。
有关为何会发生这种情况的任何想法吗?
答案 0 :(得分:1)
fprintf
需要FILE*
,而不是ofstream
。您不能以这种方式将c-style打印功能与c ++流一起使用。
像在fprintf
行上方注释掉的行中一样使用流。如果要设置精度,请使用:
myfile << std::setprecision(2) << hist->GetBinCenter(i).
不要忘记包含<iomanip>
。有关流操作符的列表,请参阅this page。
编辑:正如评论中所提到的,myfile
被隐式转换为void*
,因为fprintf
需要指针。这就是为什么它抱怨void*
而不是ofstream
。