Я новичок в С++, но я не смог найти ответ на этот (скорее всего, тривиальный) вопрос в Интернете. У меня возникли проблемы с компиляцией кода, где два класса относятся друг к другу. Для начала, должны ли мои инструкции #include перемещаться внутри или вне моих макросов? На практике это не имело значения. Однако в этом конкретном случае у меня возникают проблемы. Приведение операторов #include за пределы макросов заставляет компилятор рекурсивно и дает мне "слишком сложные вложенные" ошибки. Кажется, это имеет смысл для меня, поскольку ни один класс не был полностью определен до того, как был вызван вызов #include. Однако, как ни странно, когда я пытаюсь поместить их внутрь, я не могу объявить тип одного из классов, поскольку он не распознается. Вот, в сущности, то, что я пытаюсь скомпилировать:
хиджры
#ifndef A_H_
#define A_H_
#include "B.h"
class A
{
private:
B b;
public:
A() : b(*this) {}
};
#endif /*A_H_*/
B.h
#ifndef B_H_
#define B_H_
#include "A.h"
class B
{
private:
A& a;
public:
B(A& a) : a(a) {}
};
#endif /*B_H_*/
main.cpp
#include "A.h"
int main()
{
A a;
}
Если это имеет значение, я использую g++ 4.3.2.
И просто для того, чтобы быть ясным, в общем, куда следует включать заявления #include? Я всегда видел, как они выходят за пределы макросов, но сценарий, который я описал, как представляется, нарушает этот принцип. Спасибо любым помощникам заранее! Пожалуйста, позвольте мне уточнить мое намерение, если я совершу глупые ошибки!