46 35 D:\学生管理系统\学生管理,通用指针.cpp [Error] cannot convert 'void* (*)(Node*)' to 'void**' for argument '3' to 'Node* addAll(Node*, int, void**)'
时间: 2023-12-22 09:03:32 浏览: 31
这个错误是因为在调用函数`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;
}
```
相关问题
33 4 C:\Users\梁帅\Documents\xiangmu1\未命名.数据结构.cpp [Error] cannot convert 'node*' to 'slnode*' in assignment
这个编译错误是因为在代码中将一个 `node*` 类型的指针赋值给了 `slnode*` 类型的指针,两个指针类型不匹配。
在 C++ 中,指针的类型非常重要,指针的类型决定了指针变量可以指向哪些类型的对象。`node*` 和 `slnode*` 是不同的指针类型,它们并不能直接相互转换。
要解决这个编译错误,需要在代码中将 `node*` 类型的指针转换成 `slnode*` 类型的指针。可以使用强制类型转换来实现,例如:
```c++
slnode* p = (slnode*)node_ptr;
```
或者使用 `static_cast` 进行类型转换:
```c++
slnode* p = static_cast<slnode*>(node_ptr);
```
需要注意的是,强制类型转换可能存在一定的风险,如果将一个指向不同类型对象的指针转换成了另一种类型的指针,可能会导致程序出现未定义行为。因此,在进行类型转换时,需要非常谨慎,并尽可能避免使用强制类型转换。
165 14 E:\AAsoft\suanfa\exp6\MGraph.cpp [Error] cannot convert 'ALGraph' to 'ALGraph*' for argument '1' to 'void DispAdj(ALGraph*)'
这个错误提示看起来是函数参数类型不匹配导致的。你调用了 `DispAdj` 函数,传入的参数类型是 `ALGraph`,但是函数定义中参数类型是 `ALGraph*`,两者不匹配。你需要把参数类型改成指针类型,或者在传入参数时取地址符 `&` 来将 `ALGraph` 类型的变量转换为指针类型。
示例代码:
```
// 函数定义
void DispAdj(ALGraph* G) {
// 函数实现
}
// 函数调用
ALGraph G;
DispAdj(&G); // 传入 G 的地址
```