title: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘{’ token
body: <p>Can't find a mistake that causes the error in the title. Have been seeking for it for an hour, would be glad if someone helped me find the bug. I see no missing , and ; or what-so-ever :(
  There is really not much need to add comments about the code purpose, just an annoying syntax error. I'm pretty much new with C, therefore the mistake might be obvious, however I have absolutely no clue concerning this part of the code and why it refuses to compile with gcc, but works fine with compiler integrated into CLion. I thought that CLion basically used the gcc, but none the less it is not what really important to me. Hence I would be really thankful to the one, who could guide me through. Full error message:
  <em>error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘<strong>attribute</strong>’ before ‘{’ token
  92 |     void initialize(int _height, int _width) {</em></p>
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
  #include &lt;stdbool.h&gt;
  
  // Definicji objektów na mapie (1)
  #define ROCKFORD '@'
  #define EMPTY ' '
  #define DIRT '+'
  #define HILL '#'
  #define ROCK 'O'
  #define DIAMOND '$'
  #define EXIT 'X'
  
  // Definicji kierunków ruchu (2)
  #define UP 'w'
  #define LEFT 'a'
  #define DOWN 's'
  #define RIGHT 'd'
  #define NOTHING '0'
  
  #define NEW_LINE (char) 10
  
  typedef char object; // objekt na mapie, możliwe wartości są w definicji nr (1)
  typedef char move; // kierunek ruchu, możliwe wartości są w definicji nr (2)
  
  // *** Funkcjonal związany z typem move ***
  
  // Wczytanie instrukcji ruchów oraz zwracanie false przy nowej linii
  char readMove(move* command) {
      *command = (char) getchar();
      return (*command != NEW_LINE &amp;&amp; *command != EOF);
  }
  
  // Wczytanie jednego symbolu w pustość aby pozbyć '\n'
  void skipNewline() {
      getchar();
  }
  
  // Sprawdzenie, czy wczytany symbol nie jest końcem wejścia
  bool isValid(move command) {
      return (command != EOF);
  }
  
  // Przetwarzanie kierunku ruchu na zmianę poziomowej współrzędnej
  int verticalShift(move mv) {
      if (mv == UP || mv == DOWN)
          return (mv == UP ? -1 : 1);
      return 0;
  }
  
  // Przetwarzanie kierunku ruchu na zmianę pionowej współrzędnej
  int horizontalShift(move mv) {
      if (mv == LEFT || mv == RIGHT)
          return (mv == LEFT ? -1 : 1);
      return 0;
  }
  
  // Struktura, reprezentująca współrzędną
  typedef struct point {
      int x, y;
  } point;
  
  // *** Funkcjonal związany ze strukturą point ***
  
  // Stworzenie współrzędnej
  point makePoint(int x, int y) {
      point p;
      p.x = x, p.y = y;
      return p;
  }
  
  // Dodawanie odpowiednich współrzęd do siebie
  point addPoints(point p1, point p2) {
      return makePoint(p1.x + p2.x, p1.y + p2.y);
  }
  
  // Sprawdzenie równości pomiędzy dwoma współrzędnymi
  bool samePoints(point p1, point p2) {
      return (p1.x == p2.x &amp;&amp; p1.y == p2.y);
  }
  
  // Typ danych reprezentujący planszę
  typedef struct board {
      int height; // wysokość planszy
      int width; // szerokość plansy
      int diamonds; // liczba diamentów na planszy
      point rf; // pozycja Rockfordu w tablicy field
      object** field; // mapa objektów planszy
      bool reachedExit; // true wtw, gdy Rockford opuścił planszę
  
      // Inicjalizacja planszy
      void initialize(int _height, int _width) {
          height = _height;
          width = _width;
          field = (object **) malloc(sizeof(object *) * (size_t) height);
          for (int i = 0; i &lt; height; i++)
              field[i] = (object *) malloc(sizeof(object) * (size_t) width);
          diamonds = 0;
          reachedExit = false;
      }
  
      // Otrzymanie objektu na planszy o współrzędnej pos
      object get(point pos) {
          return field[pos.y][pos.x];
      }
  
      // Zamiana objektu na planszy o współrzędnej pos na val
      void set(point pos, object val) {
          field[pos.y][pos.x] = val;
      }
  
      // Pokazywanie objektu na planszy o współrzędnej pos
      void show(point pos) {
          putchar(samePoints(rf, pos) &amp;&amp; !reachedExit ? ROCKFORD : get(pos));
      }
  
      // Stabilizowanie planszy
      void stabilize() {
          point pos;
          for (pos.y = height - 1; pos.y &gt;= 0; pos.y--) {
              for (pos.x = width - 1; pos.x &gt;= 0; pos.x--) {
                  object cur = get(pos);
                  if (cur == DIAMOND || cur == ROCK) {
                      int dy = 0;
                      while (this-&gt;get(pos) == EMPTY &amp;&amp; !samePoints(rf, pos)) dy++;
                      set(pos, EMPTY);
                      set(makePoint(pos.y + dy, pos.x), cur);
                  }
              }
          }
      }
  
      // Pokazywanie każdego objektu na planszy
      void showBoard() {
          printf(&quot;%d %d\n&quot;, height, width);
          point pos;
          for (pos.y = 0; pos.y &lt; height; pos.y++) {
              for (pos.x = 0; pos.x &lt; width; pos.x++)
                  show(pos);
              printf(&quot;\n&quot;);
          }
      }
  
      // Oczyszczenie pamięci alokowanej dla planszy
      void clear() {
          for (int i = 0; i &lt; height; i++)
              free(field[i]);
          free(field);
      }
  } board;
  </code></pre>