46 35 D:\学生管理系统\学生管理,通用指针.cpp [Error] cannot convert 'void* (*)(Node*)' to 'void**' for argument '3' to 'Node* addAll(Node*, int, void**)'
时间: 2023-12-22 19:03:32 浏览: 114
这个错误是因为在调用函数`addAll(Node*, int, void**)`时,第三个参数应该是一个`void**`类型的指针,但是你传递了一个`void* (*)(Node*)`类型的指针,这两种类型是不兼容的,因此编译器会报错。你需要将第三个参数改为`void**`类型的指针,或者将你传递的指针进行强制类型转换。
下面是一个示例代码,演示了如何使用`void*`类型的指针和`void**`类型的指针:
```c++
#include <iostream>
using namespace std;
void func1(void* data) {
int* p = (int*)data;
cout << "func1: " << *p << endl;
}
void func2(void** data) {
int* p = (int*)*data;
cout << "func2: " << *p << endl;
}
int main() {
int num = 10;
void* p1 = #
void** p2 = &p1;
func1(p1); // 输出:func1: 10
func2(p2); // 输出:func2: 10
return 0;
}
```
相关问题
modbus_master.cpp: In function ‘void* querySlaveDevices(void*)’: modbus_master.cpp:445:110: error: cannot convert ‘querySlaveDevices(void*)::st_men_data*’ to ‘st_mem_data*’ in assignment tempBuff = (struct st_men_data *)mmap(0,data_len,PROT_READ | PROT_WRITE, MAP_SHARED, fd,0); ^ modbus_master.cpp:445:40: note: class type ‘querySlaveDevices(void*)::st_men_data’ is incomplete tempBuff = (struct st_men_data *)mmap(0,data_len,PROT_READ | PROT_WRITE, MAP_SHARED, fd,0); ^~~~~~~~~~~ modbus_master.cpp:467:86: error: invalid types ‘uint8_t {aka unsigned char}[int]’ for array subscript bool_input_buf[bool_input_index] = tempBuff->stInput[0][j]; ^ modbus_master.cpp:487:112: error: cannot convert ‘querySlaveDevices(void*)::st_men_data*’ to ‘st_mem_data*’ in assignment tempBuff = (struct st_men_data *)mmap(0, data_len,PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); ^ modbus_master.cpp:487:40: note: class type ‘querySlaveDevices(void*)::st_men_data’ is incomplete tempBuff = (struct st_men_data *)mmap(0, data_len,PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); ^~~~~~~~~~~ modbus_master.cpp:491:48: error: invalid types ‘uint8_t {aka unsigned char}[int]’ for array subscript tempBuff->stOutput[0][j] = bool_output_buf[bool_output_index]; 以上报错问题是什么原因导致的
这些错误的原因是在代码中尝试将 `querySlaveDevices(void*)::st_men_data` 类型转换为 `st_mem_data*` 类型,但这两个类型不兼容,因为它们是不同的结构体类型。这可能是由于代码中定义的结构体类型名称不一致所导致的。另外,也可能是在使用 `tempBuff` 指针时出现了问题,导致无法访问正确的内存位置。建议您仔细检查代码,确保所有结构体类型名称一致,并且使用指针时正确地指向了需要访问的内存位置。
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);
```
这样就可以避免这个编译错误了。
阅读全文