Как правильно использовать #include в двух классах которые взаимодействуют друг с другом
Дарооууа, привет. Очень нуждаюсь в помощи, сидел сегодня часов 5 над этой жопой так и не понял как я могу это сделать. Проблема : у меня есть два класса которые унаследованы от одного предка(но думаю это не особо важно), а важно вот что - они должны быть заинклюжены друг в друга и работать между собой, вот как это выглядит:
Chat.h
#include "Type.h"
#include "Message.h"
class Chat : public Type
{
public:
Chat();
Chat(qint64 id,
QString type,
QString title = "",
QString username = "",
QString firstName = "",
QString lastName = "");
Chat(QJsonObject);
//
// много много методов с которыми всё более чем OK :)
//
// тот с которым всё не OK :(
inline Message pinnedMessage() { return Message(_jsonObject.value("pinned_message").toObject); }
Message.cpp
#include "Type.h"
#include "Chat.h"
#include "User.h"
class Message : public Type
{
public:
Message();
Message(qint32 messageId,
qint32 date,
Chat chat, // Ошибка: 'Chat' has not been declared
User from = User(), // C User такой проблемы нет, т.к я не "инклюжу" Message.h в него (я так думаю что по этому)
Chat forwardFromChat = Chat(), // Ошибка: 'Chat' has not been declared
User forwardFrom = User() );
//
//Тоже много других методов с которыми всё OK
//
//Тот на который ругается компилятор
inline Chat chat() { return Chat(_jsonObject.value("chat").toObject()); } // 'Chat' does not name a type; did you mean 'stat'?
НО, но если я закомментирую pinnedMessage и уберу #include "Message.h" то все ошибки уходят. Кто-то пожалуйста молю вас объясните мне что мне делать как дальше жить я не могу просто сам. Спасибо огромное за ответ, даже за любую ссылку на литературу где показывают как это решить. Пробовал различные #ifndef и опережающее объявление класса но так ни к чему и не пришёл, что делать?