[英]Unable to convert a uint8_t vector iterator to a const uint8_t *
我有一个包含剪贴板数据的矢量对象。 我试图使用缓冲流将剪贴板数据的内容写入临时文件。 我正在使用迭代器来访问向量的内容。
我在尝试将剪贴板数据( std::vector ClipboardDataVector
为inbuffer
时遇到了麻烦,类型为const std::uint8_t* inBuffer
。
这是我使用的代码
typedef std::vector ClipboardDataVector;
File::WriteBlock(const std::uint8_t* inBuffer, std::uint32_t inBufferSize);
BOOL WriteToTempFile(ClipboardDataVector& clipBoardData) {
std::vector::iterator clipBoardIterator;
clipBoardIterator = clipBoardData.begin();
File::WriteBlock((const uint8_t *)clipBoardIterator, clipBoardData.size());
}
当我编译此代码时,我收到以下错误。
错误C2440:'type cast':无法从'std :: _ Vector_iterator <_Myvec>'转换为'const uint8_t *'
我是向量的新手,我发现很难理解这个错误 - 我该如何解决?
当您使用std::vector
您需要指定它所拥有的类型。 所以你的typedef
需要是:
typedef std::vector<uint8_t> ClipboardDataVector;
一旦你完成了这个,如果你有一个这种类型的向量,你想得到一个const uint8_t *
通常的习惯用法是:
void WriteToTempFile(const ClipboardDataVector& clipBoardData) {
const uint8_t *data = clipBoardData.size() ? &clipBoardData[0] : NULL;
// ...
}
这是有效的,因为向量具有连续的存储 - 它要求指向向量中的第一个元素。 它还检查向量为空的特殊情况,因此不能使用下标运算符。 这显然不适用于像std::list
这样的元素并不总是连续的。
您使用迭代器处于正确的轨道上,但迭代器是指针概念的概括 - 它们看起来像一个指针(通过指针或某些运算符重载)但它们不一定会发生实际上总是一个指针。 如果你需要一个来自向量的指针(因为你通常与C进行交互),那么第一个元素的地址就是安全,可移植的方式。
(我也将clipBoardData
的引用也clipBoardData
const
- 这是一个很好的习惯,标记你不会像const
那样改变的东西)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.