[error] invalid conversion from 'void*' to 'int*' [-fpermissive]
时间: 2023-04-21 19:05:44 浏览: 200
这是一个编译错误,意思是将void指针转换为int指针是无效的。在C++中,void指针可以指向任何类型的数据,但是在使用时需要进行类型转换。如果您尝试将void指针转换为int指针,编译器会发出上述错误提示。解决方法是使用正确的类型转换方式,例如使用static_cast或reinterpret_cast。
相关问题
[Error] invalid conversion from 'void*' to 'int*' [-fpermissive]以上代码报错
此错误信息提示你在C/C++代码中尝试将void指针(通常用于通用指针,指向不确定类型的内存地址)转换成int指针,但在某些编译器选项下(如-fpermissive),这种转换是不允许的,因为它们默认禁止从void*到非void类型的直接转换。
例如,以下代码可能导致此类错误:
```cpp
void* ptr; // 声明一个void指针
int* int_ptr = static_cast<int*>(ptr); // 这里会报错,因为试图将void*转换为int*
```
要解决这个问题,你需要明确你知道void指针指向的内容的确是一个int值。如果你确实有一个void指针指向了一个int,你应该先确保转换是安全的,例如:
```cpp
void* ptr = static_cast<void*>(42); // 假设ptr指向的是一个整数
if (sizeof(*ptr) == sizeof(int)) {
int* int_ptr = static_cast<int*>(ptr);
// 现在int_ptr指向了正确的int值
}
```
或者如果void*是从函数返回,且预期是某种类型的指针,需要进行正确的类型检查或动态分配:
```cpp
void* func_returning_int();
...
int* int_ptr = dynamic_cast<int*>(func_returning_int());
```
int *id = malloc(sizeof(int)); [Error] invalid conversion from 'void*' to 'int*' [-fpermissive]
这错误是因为 `malloc` 函数返回的是 `void` 指针,需要进行强制类型转换,将其转换为 `int` 指针。可以将代码修改为:
```
int *id = (int *) malloc(sizeof(int));
```
这样就能避免编译错误了。不过需要注意的是,在使用完 `id` 指针后,需要调用 `free(id)` 来释放动态分配的内存,否则会造成内存泄漏。
阅读全文