Я знаю, что этот вопрос не получает достаточного внимания, потому что он не часто встречается, но я хочу его прояснить.Циклическая зависимость в Eclipse CDT
Скажем, у меня есть 3 файла:
Ах
#ifndef A_h
#define A_h
#include "B.h"
class A {
A();
virtual ~A();
bool someFunc(B& b);
};
#endif
Bh
#ifndef B_h
#define B_h
#include "A.h"
class B {
B();
virtual ~B();
bool someFunc(A& a);
};
#endif
и main.cpp
#include "A.h"
#include "B.h"
int main() { return 0; }
без защиты (#ifndef X_h #define X_h) существует циклический оттиск endency. Добавление защиты должно решить проблему, но когда код скомпилирован, сначала main.cpp пытается включить a.h, который пытается включить b.h перед объявлением и возвращает ошибку. Если мы изменим код:
Ач
#ifndef A_h
#define A_h
class A {
A();
virtual ~A();
#include "B.h"
bool someFunc(B& b);
};
#endif
Bh
#ifndef B_h
#define B_h
class B {
B();
virtual ~B();
#include "A.h"
bool someFunc(A& a);
};
#endif
Теперь Циклическая зависимость решена, но и код компилируется без ошибок, но все же Eclipse, возвращает ошибку: «Тип" B 'не может быть разрешен "в Ah, поэтому вам нужно добавить surpress к Ah и Bh, где используется другой. Я хочу знать, есть ли другой способ решить циклическую зависимость без Eclipse, возвращая ошибку и как должен выглядеть код, если у нас есть более двух классов (A включает B, C и D; B включает A, C, D .. .)
Передовые декларации. – Downvoter