uint8_t向量的内存地址

时间:2015-09-13 09:09:23

标签: c++ memory vector

我在课堂上有以下数据:

std::vector<uint8_t> mData;

我使用的库函数之一(来自SDL)需要一个像素缓冲区地址的void *。我尝试编写以下类成员函数:

uint8_t* GetBuffer() const { return &mData[0]; }

但我收到了错误:

error: invalid conversion from 'const value_type* {aka const unsigned char*}' to 'uint8_t* {aka unsigned char*}' [-fpermissive]

我很困惑为什么我得到这个错误(向量内存在一个类中分配),为什么它试图返回一个const地址?如果我仍然想避免动态分配内存,最好的解决方法是什么?

1 个答案:

答案 0 :(得分:1)

您的函数已标记为const,因此返回const地址是唯一有意义的。

删除const将解决此问题,就像将const添加到返回的指针一样。如果这个函数真的应该const但是返回一个非常量指针,那么将向量标记为mutable可能是正确的; const_cast也可能是安全的,但您可能想要在使用它之前询问有关何时真正安全的详细信息。但是,大多数时候出现这样的问题,你的设计有问题,应该稍微改一下。