Как создать матрицу семафоров - PullRequest
0 голосов
/ 22 декабря 2019

У меня проблема с этим кодом, я должен создать матрицу семафоров, используя структуру "tavole", но при компиляции возникает ошибка:

error: несовместимые типы при инициализации type 'int 'using type' sem_t {aka union} 'tavole matrici = {шахматная доска [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);
                        }
                    }
          }

1 Ответ

0 голосов
/ 22 декабря 2019

Ваша структура нуждается в массивах, но вы передаете отдельные элементы

Замените:

tavole matrici = 
        {chessboard[SO_ALTEZZA][SO_BASE], 
         sem_matrix[SO_ALTEZZA][SO_BASE],
         posFree}; 

на

tavole matrici = 
        {chessboard, 
         sem_matrix,
         posFree}; 
...