Я попытался решить проблемы, связанные с циклической зависимостью, в некоторых файлах, которые я создал, следуя этой структуре:
хиджры
#include "B.h"
#include "C.h"
#include "D.h"
namespace NS {
class B;
class C;
class D;
class A {
/* ... */
A(const A& a) {};
A(const B& a) {};
A(const C& a) {};
A(const D& a) {};
/* ... */
};
}; // NS END
B.h
#include "A.h"
#include "C.h"
#include "D.h"
namespace NS {
class A;
class C;
class D;
class B {
/* ... */
B(const B& a) {};
B(const A& a) {};
B(const C& a) {};
B(const D& a) {};
/* ... */
};
}; // NS END
C.h
#include "A.h"
#include "B.h"
#include "D.h"
namespace NS {
class A;
class B;
class D;
class C {
/* ... */
C(const C& a) {};
C(const A& a) {};
C(const B& a) {};
C(const D& a) {};
/* ... */
};
}; // NS END
D.h
#include "A.h"
#include "B.h"
#include "C.h"
namespace NS {
class A;
class B;
class C;
class D {
/* ... */
D(const D& a) {};
D(const A& a) {};
D(const B& a) {};
D(const C& a) {};
/* ... */
};
}; // NS END
Что бы я ни пытался, у меня есть некоторые ошибки от конструкторов, принимающих в качестве классов аргументов в других файлах, даже если они помещают объявление вперед, кажется, что оно принимает его как объявление и определение и игнорирует реальное определение, которое находится в другом файле. Как я мог решить это?
ПРИМЕЧАНИЕ: в каждом файле я определил охрану, просто я не поместил его здесь