我需要一个函数,可以接受vector
的任何一个float
,int
,double
或short
。然后,它应该将vector
中的所有数据复制到一个新的vector
of char*
中。
这是我的尝试。这是我第一次不得不使用memcpy
,所以我不知道自己在做什么。
#include <vector>
#include <memory>
std::vector<float> vertices = { 0.0, 0.1, 0.2, 0.3, 0.4 };
std::unique_ptr<std::vector<char*>> buffer = std::make_unique<std::vector<char*>>();
template<class Type>
void SetVertices(const std::vector<Type>& v)
{
buffer->clear();
buffer->resize(v.size() * sizeof(Type));
memcpy(buffer.get(), v, v.size() * sizeof(Type));
}
int main()
{
SetVertices(vertices);
}
以下是错误消息:
错误C2664:'void *memcpy(void *,const *,size_t)':无法将参数2从“const std::vector”转换为“const std::vector*”
发布于 2022-10-19 13:07:03
你的代码有几个问题。首先,memcpy
接受一个指向要复制的数据和要复制数据的位置的指针。这意味着您不能将v
传递给memcpy
,而是需要传递v.data()
,因此可以获得指向向量元素的指针。
第二个问题是缓冲区有错误的类型。您希望将数据存储为字节,因此希望将其存储在char缓冲区中。std::vector<char*>
不是字节缓冲区,而是指向潜在缓冲区的指针集合。您需要的是一个std::vector<char>
,它是一个单字节缓冲区。做这些改变会让你
#include <vector>
#include <memory>
#include <cstring>
std::vector<float> vertices = { 0.0, 0.1, 0.2, 0.3, 0.4 };
std::vector<char> buffer;
template<class Type>
void SetVertices(const std::vector<Type>& v)
{
buffer.clear();
buffer.resize(v.size() * sizeof(Type));
std::memcpy(buffer.data(), v.data(), v.size() * sizeof(Type));
}
int main()
{
SetVertices(vertices);
}
https://stackoverflow.com/questions/74125618
复制相似问题