从“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
.
我正在使用 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
.