我对此代码有问题,我必须使用结构“ tavole”创建信号量矩阵,但是在编译时出现错误:
错误:使用类型'sem_t {aka union}初始化类型'int'时的类型不兼容”tavole matrici = {chessboard [SO_ALTEZZA] [SO_BASE],sem_matrix [SO_ALTEZZA] [SO_BASE],posFree};
您能解释一下为什么吗?
typedef struct {
int scacchiera[SO_ALTEZZA][SO_BASE];
sem_t semafori[SO_ALTEZZA][SO_BASE];
int posLibere;
}tavole;
int main(void){
void inizializza_matrice(int matrice[SO_ALTEZZA][SO_BASE],
int n);
void inizializza_sem_matrix(
sem_t matrice[SO_ALTEZZA][SO_BASE],
int n);
int chessboard[SO_ALTEZZA][SO_BASE], posFree = 0, value = 0;
sem_t sem_matrix[SO_ALTEZZA][SO_BASE];
tavole matrici =
{chessboard[SO_ALTEZZA][SO_BASE],
sem_matrix[SO_ALTEZZA][SO_BASE],
posFree};
inizializza_matrice(matrici.scacchiera, 0);
inizializza_sem_matrix(matrici.sem_matrix, 0);
for(int i = 0; i < SO_ALTEZZA; i++){
printf("\n");
for(int j = 0; j < SO_BASE; j++){
sem_getvalue(&matrici.semafori[i][j], &value);
printf("%d ", value);
}
}
return 0;
}
void inizializza_matrice
(int matrice[SO_ALTEZZA][SO_BASE], int n){
for(int i = 0; i < SO_ALTEZZA; i++){
for(int j = 0; j < SO_BASE; j++){
matrice[i][j] = n;
}
}
}
void inizializza_sem_matrix
(sem_t matrix[SO_ALTEZZA][SO_BASE], int n){
for(int i = 0; i < SO_ALTEZZA; i++){
for(int j = 0; j < SO_BASE; j++){
sem_init(&matrix[i][j], 0, n);
}
}
}
您的结构需要数组,但是您传递了单个元素
替换:
tavole matrici =
{chessboard[SO_ALTEZZA][SO_BASE],
sem_matrix[SO_ALTEZZA][SO_BASE],
posFree};
with
tavole matrici =
{chessboard,
sem_matrix,
posFree};
您可以替换为:
int chessboard[SO_ALTEZZA][SO_BASE], posFree = 0, value = 0;
sem_t sem_matrix[SO_ALTEZZA][SO_BASE];
tavole matrici =
{chessboard[SO_ALTEZZA][SO_BASE],
sem_matrix[SO_ALTEZZA][SO_BASE],
posFree};
使用此:
int value = 0;
tavole matrici;
在创建结构之前,您无需声明结构成员。
代码中还有另一个问题。您应该替换为:
inizializza_sem_matrix(matrici.sem_matrix, 0);
使用此:
inizializza_sem_matrix(matrici.semafori, 0);