linux从类型void*到类型data*的转换无效,编译时出错:从'void*'到'unsigned char*'的无效转换...
时间: 2023-06-17 17:08:40 浏览: 157
这个错误可能是因为您试图将 `void*` 类型的指针转换为 `data*` 类型的指针,但是编译器无法确定如何进行转换,因为 `void*` 类型的指针不指向任何特定类型的数据。要解决这个问题,您需要将 `void*` 类型的指针转换为 `unsigned char*` 类型的指针,然后再将其转换为 `data*` 类型的指针。示例代码如下:
```
void* ptr = malloc(sizeof(data));
data* dp = (data*)((unsigned char*)ptr);
```
在这个示例中,我们首先将 `void*` 类型的指针 `ptr` 转换为 `unsigned char*` 类型的指针,然后再将其转换为 `data*` 类型的指针 `dp`。这样可以避免编译器报错,并且能够正确地将 `void*` 类型的指针转换为 `data*` 类型的指针。
相关问题
pullflowmonitor.cpp: In member function 'bool PullFlowMonitor::initModel()': pullflowmonitor.cpp:1223:99: error: cannot convert 'uint8_t* {aka unsigned char*}' to 'void**' for argument '1' to 'aclError aclrtMallocCached(void**, size_t, aclrtMemMallocPolicy)' AclInputs.inputs[i].data,sizeof(uint8_t)*inputsize,ACL_MEM_MALLOC_HUGE_FIRST);
这个错误是因为aclrtMallocCached函数的第一个参数是一个指向void*类型的指针,而你的代码中传递的是一个指向uint8_t*类型的指针,这样会导致类型不匹配,编译器无法编译通过。
解决这个问题,可以将aclrtMallocCached函数的第一个参数的类型改为void*类型的指针。
例如:
```c++
void* buffer;
aclError ret = aclrtMallocCached(&buffer, size, ACL_MEM_MALLOC_HUGE_FIRST);
```
或者使用reinterpret_cast进行类型转换:
```c++
uint8_t* buffer;
aclError ret = aclrtMallocCached(reinterpret_cast<void**>(&buffer), size, ACL_MEM_MALLOC_HUGE_FIRST);
```
这样就可以避免这个编译错误了。
warning: incompatible pointer types passing 'char (*)[256]' to parameter of type 'uint8 t *' (aka 'unsigned char *')
这是一个编译时警告,表示你在传递一个字符数组(`char(*)[256]`)给一个期望无符号字节指针(`uint8_t*` 或 `unsigned char*`)时遇到了类型不匹配的问题。在C或C++中,字符数组实际上隐含了一个指向数组第一个元素的指针,所以直接赋值可能会导致类型转换错误。
例如,如果你有这样一个函数声明:
```c++
void processData(uint8_t *data);
```
而你试图将一个字符数组像这样传入:
```c++
processData("Hello, world!"); // 这里会引发警告,因为"Hello, world!"是一个字符数组,不是无符号字节指针
```
解决这种警告的方式通常是显式地将字符数组转换为所需的指针类型,如:
```c++
void processData(const uint8_t *data) {
// 数据处理...
}
// 或者
void processData(const char *data) {
uint8_t *byteData = (uint8_t*) data; // 将字符指针转换为无符号字节指针
// 现在可以安全处理 byteData,但请注意字符串结束符'\0'会被忽略
}
```
阅读全文
相关推荐
















