error C2036:'void ' : unknown size void
时间: 2023-09-12 08:08:00 浏览: 56
这个错误信息通常是由于在定义一个 void 类型的数组时,没有指定数组的大小,导致编译器无法确定数组的大小。因为 void 类型不占用任何内存空间,所以编译器无法计算出数组的大小。
例如,下面这个代码就会产生这个错误:
```c
void arr[]; // 错误:未指定数组的大小
```
要解决这个问题,需要在定义数组时指定它的大小,或者使用其他数据类型来替代 void 类型。
相关问题
C语言c2036错误,error C2036:'void *' : unknown size void*和void**的区别
`*`表示指向未知类型的指针,因此它可以指向任何类型的数据。它的大小在编译时是已知的。
`void**`表示指向 void* 类型指针的指针,或者说是指向指针的指针。它本身也是一个指针,指向另一个指针,因此它的大小是已知的。在使用`void**`时需要注意,因为它需要指向一个指针,所以必须先分配一个指针,再将该指针的地址传递给`void**`。
Line 4: Char 5: error: unknown type name 'sem_t' sem_t zero_sem;
对不起,我之前给出的修正代码中使用了信号量,但是在C++标准库中并没有直接提供信号量的支持。
如果您想要使用信号量,您需要使用操作系统提供的信号量实现,比如在POSIX标准中定义的信号量。您可以使用`sem_init()`、`sem_wait()`和`sem_post()`等函数来操作信号量。
以下是使用POSIX信号量实现的修正代码:
```cpp
#include <iostream>
#include <functional>
#include <mutex>
#include <condition_variable>
#include <semaphore.h>
class ZeroEvenOdd {
private:
int n;
sem_t zero_sem;
sem_t even_sem;
sem_t odd_sem;
public:
ZeroEvenOdd(int n) {
this->n = n;
sem_init(&zero_sem, 0, 1);
sem_init(&even_sem, 0, 0);
sem_init(&odd_sem, 0, 0);
}
~ZeroEvenOdd() {
sem_destroy(&zero_sem);
sem_destroy(&even_sem);
sem_destroy(&odd_sem);
}
void zero(std::function<void(int)> printNumber) {
for (int i = 0; i < n; i++) {
sem_wait(&zero_sem);
printNumber(0);
if (i % 2 == 0) {
sem_post(&odd_sem);
} else {
sem_post(&even_sem);
}
}
}
void even(std::function<void(int)> printNumber) {
for (int i = 2; i <= n; i += 2) {
sem_wait(&even_sem);
printNumber(i);
sem_post(&zero_sem);
}
}
void odd(std::function<void(int)> printNumber) {
for (int i = 1; i <= n; i += 2) {
sem_wait(&odd_sem);
printNumber(i);
sem_post(&zero_sem);
}
}
};
```
请确保在编译和运行代码时链接了`-lpthread`选项,以便正确使用POSIX信号量。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![ppt](https://img-home.csdnimg.cn/images/20210720083527.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)