Это называется круговой зависимостью.В классе Two.h
class One;
class Two {
public:
One* oneRef;
};
И в классе One.h
class Two;
class One {
public:
Two* twoRef;
};
«Первый класс»;и "второй класс";директивы выделяют имена классов «One» и «Two» соответственно;но они не определяют никаких других деталей, кроме имени.Поэтому вы можете создавать указатели на класс, но вы не можете включать весь класс следующим образом:
class One;
class Two : public One {
};
class Three {
public:
One one;
};
Причина, по которой два примера выше не будут компилироваться, заключается в том, что, хотя компилятор знает, что существует класс One,не знает, какие поля, методы или виртуальные методы может содержать класс One, поскольку определено только имя, а не фактическое определение класса.