我正在使用 HDF5 库从 C++ 中的 HDF5 文件中读取数据,我遇到问题的调用如下:
status = H5Dread(
hdf5_dataset,
hdf5_datatype,
hdf5_dataspace_in_memory,
hdf5_dataspace_in_file,
H5P_DEFAULT,
buf
);
最后一个参数应该是一个空指针,我有一个我想要分配的浮点 vector ,但是当我尝试传递 vector 时 g++ 给我以下错误:
error: cannot convert
‘std::vector<float, std::allocator<float> >’
to‘void*’
for argument‘6’
to‘herr_t H5Dread(hid_t, hid_t, hid_t, hid_t, hid_t, void*)’
有什么方法可以直接写入 vector 而不必分配两次内存?
最佳答案
由于 std::vector
保证数据存储在连续内存中,您可以像这样将 vector 转换为指针:
std::vector<float> myFloats;
void *ptr = static_cast<void*>(&myFloats[0]); // or &myFloats.front()
编辑:如果您在不调用 push_back
的情况下写入它,请确保先调整大小
足够的空间!
关于C++ 空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6393178/