Когда вы делаете это
ChessMoves checkBoard(board);
вы объявляете функцию в области видимости класса GEngine
. Это также недопустимое объявление (потому что board не тип - ищите другие сообщения об ошибках от вашего компилятора). Когда вы делаете
checkBoard.fillcBoard(from);
ваш компилятор думает, что вам нужно получить доступ к функции-члену объявленной функции, что недопустимо, потому что GEngine::checkBoard
не тип класса (а тип функции, и это то, что говорит компилятор).
То, что вы хотите сделать, это:
class GEngine {
private:
ChessBoard board;
ChessMoves checkBoard;
...
// In the implementation file
GEngine::GEngine() : board(), checkBoard(board) {}
И это должно быть хорошо. Просто убедитесь, что вы (в данном случае) никогда не меняете порядок объявления в классе, так как члены класса инициализируются в порядке их объявления (но если вы перепутаете это, ваш компилятор должен предупредить вас об этом - обязательно отнеситесь к этому предупреждению серьезно).