c++ - uint8_t vector 的内存地址

标签 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]

我很困惑为什么我会收到这个错误( vector 内存是在一个类中分配的),为什么它试图返回一个常量地址?如果我仍然想避免动态分配内存,那么解决此问题的最佳方法是什么?

最佳答案

const 方法的this 指针是const,因此是它的成员。 mData 因此是 const

要么返回一个const uint8_t*,要么使该方法成为非常量:

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

关于c++ - uint8_t vector 的内存地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32548095/

相关文章:

c++ - 如何在 OpenGL 中使用其他现有纹理创建纹理图集?

c++ - 为什么这个 operator= 调用不明确?

c++ - 添加到 vector 或从 vector 中删除后,指向 vector 元素的指针是否保留(在 C++ 中)

c++ - STL 容器和大量数据

c++ - 动态内存分配,C++

c++ - 为什么在fopen中使用 'r+'模式时文件必须存在?

c++ - 使用全局 std::array 引用作为模板参数时如何简化参数?

JavaFX:阶段和 Controller 生命周期...内存管理

c++ - C++ 游戏中的内存和性能

c - 制表符和空格如何影响 C 中的代码大小