[Error] invalid conversion from 'void*' to 'int*' [-fpermissive]以上代码报错
时间: 2024-10-18 10:18:58 浏览: 162
此错误信息提示你在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());
```
相关问题
[error] invalid conversion from 'void*' to 'int*' [-fpermissive]
这是一个编译错误,意思是将void指针转换为int指针是无效的。在C++中,void指针可以指向任何类型的数据,但是在使用时需要进行类型转换。如果您尝试将void指针转换为int指针,编译器会发出上述错误提示。解决方法是使用正确的类型转换方式,例如使用static_cast或reinterpret_cast。
[Error] invalid conversion from 'int*' to 'int' [-fpermissive]
这个错误通常是因为将一个 int 指针赋值给一个 int 类型的变量,或者将 int 指针作为参数传递给需要 int 类型参数的函数。
比如以下代码就会出现这个错误:
```
int* ptr = new int(10); // 创建一个 int 指针并初始化为 10
int a = ptr; // 错误:将 int 指针赋值给 int 类型变量
```
解决方法是将指针解引用,获取其指向的值:
```
int* ptr = new int(10); // 创建一个 int 指针并初始化为 10
int a = *ptr; // 正确:获取 ptr 指向的值并赋值给 a
```
或者将函数参数改为接受 int 指针类型:
```
void func(int* ptr) {
// ...
}
int main() {
int a = 10;
func(&a); // 传递 a 的地址给函数
return 0;
}
```
阅读全文
相关推荐
















