【问题标题】:Fill values directly in HDF5直接在 HDF5 中填充值
【发布时间】:2014-04-05 19:07:45
【问题描述】:

我试图在同一个 hdf5 数据库中输入一个双精度值。它由(目前)我在输入新值之前扩展的 1 个数据集组成。那是因为我正在模拟一个模型并且想要记录 > 100000 个条目。这很好,扩展部分也很好,但我不明白写作的一部分。我写条目的代码:

double pizza[1] = {7.0};
status = H5Dwrite (dataset, H5T_NATIVE_DOUBLE, memspace, filespace,H5P_DEFAULT, pizza);

使用数据集、内存空间和文件空间为相应参数正确变量(取自 here)。但是为什么最后一个参数应该是一个预定义的列表呢?当我尝试直接进入7.0时

    status = H5Dwrite (dataset, H5T_NATIVE_DOUBLE, memspace, filespace,H5P_DEFAULT, {7.0});

像这样或这样:

    status = H5Dwrite (dataset, H5T_NATIVE_DOUBLE, memspace, filespace,H5P_DEFAULT, 7.0);

它给出了一个错误:

    error: cannot convert ‘double’ to ‘const void*’ for argument ‘’ to ‘herr_t H5Dwrite(hid_t, hid_t, hid_t, hid_t, hid_t, const void*)’ = H5Dwrite (dataset, H5T_NATIVE_DOUBLE, memspace, filespace,H5P_DEFAULT, 7.0);

在第二种情况下:

    error: cannot convert ‘<brace-enclosed initializer list>’ to ‘const void*’ for argument ‘6’ to ‘herr_t H5Dwrite(hid_t, hid_t, hid_t, hid_t, hid_t, const void*)’H5Dwrite (dataset, H5T_NATIVE_DOUBLE, memspace, filespace,H5P_DEFAULT, {7.0});

为什么列表与单个值不同,即使被括号括起来?

【问题讨论】:

    标签: c hdf5


    【解决方案1】:

    编译器取值7.0,默认情况下编译器将其转换为双精度值。因此它向您显示此错误。

    如果您需要使其工作,请使用 pizza 的基地址,并将其类型转换为 (const void *)

    大括号括起来的初始化列表可能会出现,因为编译器认为它是一个变量参数列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-28
      • 1970-01-01
      • 2018-12-04
      • 2017-07-20
      • 2022-01-12
      相关资源
      最近更新 更多