无法将uint8_t向量迭代器转换为const uint8_t *

时间:2012-06-02 07:28:58

标签: c++ types casting

我有一个包含剪贴板数据的矢量对象。我试图使用缓冲流将剪贴板数据的内容写入临时文件。我正在使用迭代器来访问向量的内容。

我在尝试将std::vector ClipboardDataVector的剪贴板数据转换为类型为inbuffer的{​​{1}}时遇到了麻烦。

以下是我使用的代码

const std::uint8_t* inBuffer

编译此代码时,我收到以下错误。

  

错误C2440:'type cast':无法转换为'std :: _ Vector_iterator< _Myvec>'到'const uint8_t *'

我是向量的新手,我发现很难理解这个错误 - 我该如何解决?

1 个答案:

答案 0 :(得分:5)

当您使用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也是const - 这是一个很好的习惯,标记你不会改变的事情const