Что ж, ваша проблема заключается в том, что когда вы включаете MCell.h, вы включаете MShip.h, который ссылается на Cell, определенный в MCell.h.Однако MShip.h ссылается на MCell.h, который не будет включен из-за прагмы.Если бы однажды прагмы не было, вы бы получили бесконечный цикл, который бы переполнял ваш компилятор ...
Вместо этого вы могли бы использовать прямое объявление.
, то есть удалить #include"MCell.h" из MShip.h и замените его просто "классом Cell";Все ваши проблемы с циркулярными ссылками исчезнут:)