Question: I'm making a board game using C++ that involves multiple classes. When I include the header file of `piece.h` in `board.h`, all of piece's members are being recognized by the board. But when I simultaneously link `board.h` to `piece.h`, the members of board are not being recognized.
Here are how I am linking them:

-In `piece.h`

```
    #ifndef PIECE_H_
    #define PIECE_H_
    #include <iostream>
    #include "board.h"

```

-In `board.h`

```
    #ifndef BOARD_H_
    #define BOARD_H_
    #include<iostream>
    #include "piece.h"

```

I declared multiple piece members of board and piece type parameters of board functions, and they work fine. Yet declaring a void function within piece that takes board parameters, as such:

```
    void horizontal         (Board b);
    void vertical           (Board b);
    void diagonal           (Board b);

```

results in an error saying "Board has not been declared"

Answer: 
This include scheme has 2 alternate views. When piece.h is included, all of the board.h is included before the body of piece.h.

When board.h is included, all piece.h is included before board

To have classes work together

1) you need to predeclare at least one class.
2) To use a class, the compiler either needs to use a reference (or pointer) or know the size.

```
class Board;

```

Then this can be used

```
void horizontal  ( Board & b );

```

Without knowing its size.
Try putting this at the top of "piece.h"

```
 class Board;

```