无法使用“value_type *”类型的右值(又名 char*)初始化“const unsigned char *”类型的参数

Posted

技术标签:

【中文标题】无法使用“value_type *”类型的右值(又名 char*)初始化“const unsigned char *”类型的参数【英文标题】:Cannot initialize a parameter of type "const unsigned char *" with an rvalue of type 'value_type *' (aka char*) 【发布时间】:2014-04-01 12:02:40 【问题描述】:

我在以下几行中收到错误“无法使用 'value_type ' (aka char) 类型的右值初始化类型为“const unsigned char *”的参数”。

image->initWithImageData(&(buffer->front()),buffer->size());

缓冲区的类型为std::vector<char> *buffer

&(buffer->front() 出现上述错误,有人知道如何解决吗?

【问题讨论】:

unsigned char*char* 是两种不同的类型。你能把buffer改成std::vector<unsigned char> *buffer 【参考方案1】:

const 不是问题,但您需要强制转换指针 - 通常不建议这样做,但如果您没有其他选择,您可以执行以下操作之一

char *a = buffer->data();
const unsigned  char *b= reinterpret_cast<unsigned char *>(a);

或纯 C 风格

const unsigned  char *b= (const unsigned  char *)(a);

【讨论】:

以上是关于无法使用“value_type *”类型的右值(又名 char*)初始化“const unsigned char *”类型的参数的主要内容,如果未能解决你的问题,请参考以下文章

无法使用“const Node *”类型的右值初始化“Node *”类型的变量

错误:对类型为'const ItemInstance'的引用无法绑定到类型为'void'的右值

为啥 C++ 不能用“超类”类型的右值初始化“派生类”类型的变量?

为啥按值捕获 std::istringstream 的右值的 Op 无法满足 Accumulateable 概念?

重新理解C11的右值引用

对临时声明的右值引用