【问题标题】:How to create a root file如何创建根文件
【发布时间】:2020-08-11 15:03:35
【问题描述】:

我是 root 的初学者,我想创建一个 root 文件,但在第一步我有一个错误。当我想定义 TFile 时,我有这个错误消息:不允许不完整的类型。 怎么了?

TFile* F = new TFile("test.root", NEW);

【问题讨论】:

  • 你使用ROOT 6吗?如果是这样,请尝试在您的 shell 中运行以下命令:root -l -b -q -e "TFile* F = new TFile(\"test.root\", \"NEW\")" - 是否出现了 test.root?如果不是,具体的错误信息是什么?
  • 不,我使用的root版本不是root 6。我使用的是5版本。

标签: root-framework


【解决方案1】:

您使用的 TFile 构造函数的第二个参数是一个字符串 (link to doc)。在您编写的内容中,编译器前端(无论是您直接使用的普通编译器应用程序,还是从根命令行分派的编译,或作为 jit 编译器前端),NEW 只是一个未知的词.

正确的版本是

TFile* file = new TFile("test.root", "NEW");

(或我的建议

TFile* file = TFile::Open("test.root", "NEW");

因为Open 允许网络上的other filenames,如果您需要的话。而且您可能还更喜欢std::unique_ptr 而不是裸指针,这样您的文件会在指针超出范围时自动关闭

std::unique_ptr<TFile> file{TFile::Open("file.root", "NEW")};

…虽然我不确定后者是否适用于互联网上的所有使用模式和教程… )

【讨论】:

  • 对不起,我忘了把 NEW 放在 " " 中!但这不是问题。错误仍然存​​在。我有一个 TFile 错误。
  • 那么您发布的代码可能不是问题所在。你在用那行做什么:a)将它按原样输入到根提示符中 b)将它放在一个文件中,该文件是从根提示符加载的,带有 '.L file.C' (或 .x),没有 '+ ' 符号 c) 将它放在一个文件中,并使用 .L file.C+(或 .x)加载它,并在文件名后附加 + 符号 d) 在一个“普通”c++ 项目中的 c++ 源代码文件中根标头,并且您链接到根库。另请发布完整的错误消息。我怀疑你做了 c) 或 d) 并在你的文件中忘记了#include "TFile.h"
  • 谢谢,问题解决了。我不知道 TFile 有库。
猜你喜欢
  • 2013-05-08
  • 1970-01-01
  • 1970-01-01
  • 2023-02-20
  • 2023-03-15
  • 2013-10-27
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
相关资源
最近更新 更多