我在课堂上有以下数据:
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地址?如果我仍然想避免动态分配内存,最好的解决方法是什么?
答案 0 :(得分:1)
您的函数已标记为const
,因此返回const地址是唯一有意义的。
删除const
将解决此问题,就像将const
添加到返回的指针一样。如果这个函数真的应该是const
但是返回一个非常量指针,那么将向量标记为mutable
可能是正确的; const_cast
也可能是安全的,但您可能想要在使用它之前询问有关何时真正安全的详细信息。但是,大多数时候出现这样的问题,你的设计有问题,应该稍微改一下。