无法将参数 1 从 'char *' 转换为'uint8_t *'
cannot convert parameter 1 from 'char *' to 'uint8_t *'
void OnReceived(std::shared_ptr<uint8_t> buffer, int len) {
.........
}
int main(){
std::vector<char> buffer(1000);
OnReceived((std::shared_ptr<uint8_t>)buffer.data(),rcvlen);
}
我试着选,但我选不出来,我不知道为什么!!!
Error 1 error C2664: 'std::tr1::_Ptr_base<_Ty>::_Reset0' : cannot convert parameter 1 from 'char *' to 'uint8_t *' c:program filesmicrosoft visual studio 10.0vcincludememory 1705
那么我该如何转换它呢?
你真的不想那样做。除了char和uint8_t可能是不同的类型之外,即使强制编译代码,缓冲区也会被释放两次,很可能会导致程序崩溃。只需更改OnReceived即可接受原始指针。
除了类型不匹配之外,您不希望这样做。当向量析构函数和shared_ptr释放同一内存时,它几乎会导致崩溃。您应该考虑boost::shared_array
或指向整个向量的共享指针(shared_ptr<std::vector>
(,而不是现在所做的。或者,正如Igor所建议的,如果OnReceived
不需要共享缓冲区的所有权,则可以将其更改为接受原始指针。
uint8_t
是一个unsigned char
,因此您需要更改缓冲区的类型或重新解释_。
buffer.data((将返回一个char*。你试图将其转换为std::shared_ptr,换句话说,用它构造一个shared_ptr。在它的实现中,它试图分配指针,但不能,因为你传入了一个不兼容的指针类型。
在传入之前,尝试将其转换为适当的类型,例如:
OnReceived((std::shared_ptr<uint8_t>)(uint8_t *)buffer.data(),rcvlen);
或者,也许是一个更好的解决方案,将std::vector转换为uint8t的vector。
相关文章:
- 从值小于256的uint16到uint8的Endian安全转换
- 将 Uint8(浮点AUDIO_F32)转换为int16_t(16 位 PCM)
- 错误:无法将'uint8* {aka unsigned int*}'转换为"常量emxArray_uint8_T*"?
- 将具有不同字段的结构转换为 uint8 的数组
- 如何将 uint8 列表转换为其相应的有符号值
- 如何将元素从 Swift 中的 [UnsafeMutablePointer<UInt8>] 转换为 C++ 中的 UInt8 *
- 从字符串转换为 uint8,反之亦然
- 将 UInt8 C++值转换为 C# 字节数组
- 警告缩小转换范围(uint32 到 uint8)
- 将 uint8 转换为范围为 0-1 的浮点数的最有效方法
- 将 Uint8 转换为无符号字符 RGB 值
- 将uint8的矢量转换为ascii十六进制字符串的更好方法
- 从std::string转换为uint8
- Jagged Uint8数组转换为C#字节
- 将"wstring"转换为"const UInt8 *"
- 我如何将bitset转换为字节/uint8数组
- 如何在c++中将UINT8转换为UINT32 ?
- 我如何将uint8_t (SDL中的Uint8)转换为字符串
- 将uint8 vector类型的元素转换为stringstream类型
- 转换uint8字节数组到任何WPF渲染对象