sem_t resource_sem, read_sem = 3; [Error] invalid conversion from 'int' to 'sem_t {aka void*}' [-fpermissive]
时间: 2023-07-12 07:08:50 浏览: 71
这个错误是因为 `read_sem` 被赋值为 3,而 `sem_t` 类型是一个指向不透明信号量结构体的指针类型,不能直接赋值为整数。正确的方式应该是使用 `sem_init()` 函数来初始化信号量,例如:
```c
#include <semaphore.h>
sem_t resource_sem;
sem_t read_sem;
int main() {
sem_init(&resource_sem, 0, 1); // 初始化资源信号量为1
sem_init(&read_sem, 0, 3); // 初始化读信号量为3
return 0;
}
```
这样可以创建两个信号量,并且将 `resource_sem` 初始化为1,`read_sem` 初始化为3。
相关问题
invalid conversion from 'void*' to 'int*' 怎么办
这个错误提示表明你在将一个void指针转换为int指针时出错了。由于void指针可以指向任何类型的数据,因此需要进行类型转换才能正确使用。
如果你想将一个void指针转换为int指针,可以使用以下代码:
```cpp
void *ptr;
int *intptr = static_cast<int*>(ptr);
```
其中,static_cast是一种类型转换运算符,可以将一个指针从一种类型转换为另一种类型。需要注意的是,这种类型转换可能会引发一些未定义行为,因此在进行类型转换时需要确保类型转换是安全的。
如果你确定这个void指针指向的是一个int类型的数据,可以使用以下代码将其转换为int类型:
```cpp
void *ptr;
int value = *static_cast<int*>(ptr);
```
在这种情况下,我们通过解引用指针获取指针所指向的数据,然后将其转换为int类型。需要注意的是,如果void指针指向的不是int类型的数据,则这种类型转换可能会导致未定义行为。
[error] invalid conversion from 'void*' to 'int*' [-fpermissive]
这是一个编译错误,意思是将void指针转换为int指针是无效的。在C++中,void指针可以指向任何类型的数据,但是在使用时需要进行类型转换。如果您尝试将void指针转换为int指针,编译器会发出上述错误提示。解决方法是使用正确的类型转换方式,例如使用static_cast或reinterpret_cast。
阅读全文