[Error] invalid conversion fromvoid*to'BSTree{aka BSTnode*}[-fpermissive
时间: 2024-03-24 18:41:11 浏览: 13
这个错误是因为 `void*` 类型指针不能直接转换为 `BSTnode*` 类型指针,需要进行显式类型转换。
例如,如果你在函数中使用了 `void*` 类型的指针 `p`,可以通过以下方式进行转换:
```c
BSTnode* node = (BSTnode*)p;
```
这样就可以将 `p` 指向的内存块转换为 `BSTnode*` 类型的指针 `node`,从而可以使用 `node` 访问结构体成员。
需要注意的是,对于 `void*` 类型指针的强制类型转换是不安全的,因为它可能会导致类型不匹配,从而引发未定义行为。因此,如果可能的话,最好避免使用 `void*` 类型指针,而是使用具体类型的指针。
相关问题
*T = malloc(sizeof(BSTnode));[Error] invalid conversion fromvoidto'BSTree{aka BSTnode}[-fpermissive
这个错误是因为 `malloc` 函数返回的是 `void*` 类型指针,需要将其转换为 `BSTnode*` 类型指针。
可以使用以下方式进行类型转换:
```c
*T = (BSTnode*)malloc(sizeof(BSTnode));
```
这样就可以将 `malloc` 函数返回的 `void*` 类型指针转换为 `BSTnode*` 类型指针,从而可以将其赋值给 `*T`。
需要注意的是,对于 `malloc` 函数返回的指针进行强制类型转换是一种比较常见的操作,但是如果转换后的指针类型不正确,可能会导致未定义行为。因此,在进行强制类型转换时应该非常小心,确保转换后的指针类型正确。
[Error] invalid conversion from void* to char** [-fpermissive]
这个错误通常是由于将 `void*` 类型的指针直接赋值给 `char**` 类型的指针导致的。因为 `void*` 类型的指针可以指向任何类型的数据,而 `char**` 类型的指针只能指向 `char*` 类型的指针。
要解决这个问题,你需要先将 `void*` 类型的指针转换为 `char*` 类型的指针,然后再将其赋值给 `char**` 类型的指针。例如:
```c++
void* data = get_data();
char* char_data = static_cast<char*>(data);
char** char_ptr = &char_data;
```
这样就可以将 `void*` 类型的指针 `data` 转换为 `char**` 类型的指针 `char_ptr` 了。注意,这里使用了 `static_cast` 进行类型转换,如果你不确定类型转换是否安全,可以使用 `dynamic_cast` 进行安全的类型转换。