无法将参数 1 从 'char *' 转换为'uint8_t *'

cannot convert parameter 1 from 'char *' to 'uint8_t *'

本文关键字:转换 uint8 char 参数      更新时间:2023-10-16
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。