Если у вас есть защита, она выглядит следующим образом: препроцессор включает Import_LP.h, который говорит «включай меня только один раз», затем включает Window.h, который пытается включить Import_LP.h, но не из-завключить охранник.Поэтому Window.h начинает синтаксический анализ класса окна, но завершается неудачей, поскольку заголовок класса Import_LP.h еще не полностью загружен.
Решение состоит в том, чтобы предварительно объявить классы:
Window.h:
#ifndef WINDOW_H //works best if this is first
#define WINDOW_H
#pramga once
class Import_LP;
class Window {
Import_LP* member; //member has to be a pointer
void func();
};
#include "Import_LP.h"
inline void Window::func() {
}
#endif WINDOW_H
Import_LP.h:
#ifndef IMPORT_LP_H //works best if this is first
#define IMPORT_LP_H
#pramga once
class Window;
class Import_LP {
void func(Window& parent); //parameter has to be a pointer or reference
};
#include "Window.h"
inline void Import_LP::func(Window* parent) {
}
#endif IMPORT_LP_H
Это позволит вам ссылаться на другое только посредством указателя или ссылки до фактического включения, но это должно быть выполнимо.Технически это нужно делать только с одним или другим заголовком.