HDF5 Cpp -检索所有组的名称在一个文件
HDF5 Cpp - retrieving the names of all groups in a file
我尝试读取并保存一个文件中所有组的名称(在文件的根组中)。因此,我使用H5Literate
来遍历根组中的所有对象。
我的问题是,我可以打印组的名称,但我不知道如何将它们保存在数组中。
我的运算符函数是这样的:
extern "C" herr_t file_info(hid_t loc_id, int *mom, string *Moments, const char *name, const H5L_info_t *linfo,
void *opdata);
{
hid_t group;
group = H5Gopen2(loc_id, name, H5P_DEFAULT);
cout << "Name : " << name << endl;
Moments[mom]=name;
H5Gclose(group);
mom++;
return 0;
}
迭代如下:
Group *rootGr = new Group (file->openGroup("/"));
hsize_t numMom = rootGr->getNumObjs();
string Moments[numMom];
int mom=0;
herr_t idx = H5Literate(rootGr->getId(), H5_INDEX_NAME, H5_ITER_INC, NULL, file_info, NULL);
cout
工作,但我得到一个错误时,试图在Moments[mom]
保存名称。
怎么了?
编辑:错误是:
invalid conversion from 'herr_t (*)(hid_t, int*, std::string*, const char*, const H5L_info_t*, void*) {aka int (*)(int, int*, std::basic_string<char>*, const char*, const H5L_info_t*, void*)}' to 'H5L_iterate_t {aka int (*)(int, const char*, const H5L_info_t*, void*)}' [-fpermissive] C/C++ Problem
Invalid arguments '
Candidates are:
int H5Literate(int, enum H5_index_t, enum {H5public.h:9387}, unsigned long long int *, int (*)(int, const char *, const {H5Lpublic.h:3236} *, void *), void *)
Semantic Error
invalid types 'std::string* {aka std::basic_string<char>*}[int*]' for array subscript C/C++ Problem
initializing argument 5 of 'herr_t H5Literate(hid_t, H5_index_t, H5_iter_order_t, hsize_t*, H5L_iterate_t, void*)' [-fpermissive] C/C++ Problem
编辑2:I fixed it:
我添加了一个全局
std::vector<string> GroupNames;
那么我的运算符函数是这样的:
herr_t
file_info(hid_t loc_id, const char *name, const H5L_info_t *linfo, void *opdata)
{
hid_t group;
group = H5Gopen2(loc_id, name, H5P_DEFAULT);
GroupNames.push_back(name);
cout << "Name : " << name << endl;
H5Gclose(group);
return 0;
}
即使全局变量"有效",您也应该通过void指针传递数据。
herr_t
file_info(hid_t loc_id, const char *name, const H5L_info_t *linfo, void *opdata)
{
hid_t group;
auto group_names=reinterpret_cast< std::vector<std::string>* >(opdata);
group = H5Gopen2(loc_id, name, H5P_DEFAULT);
//do stuff with group object, if needed
group_names->push_back(name);
cout << "Name : " << name << endl;
H5Gclose(group);
return 0;
}
新的调用变成
std::vector<std::string> group_names;
herr_t idx = H5Literate(rootGr->getId(), H5_INDEX_NAME, H5_ITER_INC, NULL, file_info, &group_names);
额外练习:如果group_names->push_back(name)抛出怎么办?
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 挂起和取消挂起一个文件DLL
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- C++试图读取一个文件并输出到另一个文本文件
- 如何从另一个文件继承私有成员变量和公共函数
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 如何打开并写入一个名称取自C++中字符串的文件
- 构建一个由C和C++文件组成的库
- c++多进程编写一个唯一的文件
- 如何使用CLion在Mac上创建一个新的.txt文件
- 如何将class.cpp和class.hpp编译为一个.o文件
- 写入文件会产生一个空文件或根本没有文件
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 生成一个生成文件,该生成文件使用Automake在一个步骤中编译和链接所有源文件
- 为什么我的 heap.h 文件给我一个LNK2001错误?
- Pantheios 不使用 MFC 应用程序写入一个文件(一个 exe + 两个 DLL)
- 在C++中一次读取一个文件一个int
- 输入/输出文件(一个字母的大写)
- 如何使用两个预编译的头文件.一个用于托管代码,另一个用于非托管代码.xxx.PCH不是一个有效的预编译头文件