C ++ пустой указатель - PullRequest
0 голосов
/ 18 июня 2011

Я использую библиотеку HDF5 для чтения данных из файла HDF5 в c ++, и у меня возникают следующие проблемы:

status = H5Dread(
    hdf5_dataset,
    hdf5_datatype,
    hdf5_dataspace_in_memory,
    hdf5_dataspace_in_file,
    H5P_DEFAULT,
    buf
);

Последний аргумент должен быть указателем void, и у меня есть вектор с плавающей точкой, который я хочу выделить, однако при попытке передать вектор g ++ выдает следующую ошибку:

ошибка: невозможно преобразовать ‘std::vector<float, std::allocator<float> >’ в ‘void*’ для аргумента ‘6’ в ‘herr_t H5Dread(hid_t, hid_t, hid_t, hid_t, hid_t, void*)’

Есть ли способ, которым я могу записать непосредственно в вектор без необходимости выделять память дважды?

Ответы [ 2 ]

4 голосов
/ 18 июня 2011

Учитывая std::vector<float>, вы можете получить указатель на непрерывный буфер float s, таким образом:

std::vector<float> v;
fillMyVectorSomehow(v);

float* buffer = &v[0]; // <---

Вы можете привести его к void* и передать его через.

4 голосов
/ 18 июня 2011

Поскольку std::vector гарантирует, что данные хранятся в непрерывной памяти, вы можете преобразовать вектор в указатель следующим образом:

std::vector<float> myFloats;
void *ptr = static_cast<void*>(&myFloats[0]); // or &myFloats.front()

Редактировать: если вы пишете в него без вызова push_back, сначала убедитесь, что у вас resize достаточно места!

...