Мне нужно включить рекурсивные заголовочные файлы класса.
#ifndef FOO_H
#define FOO_H
#include "Bar.h"
class Foo {
public:
Bar* barMember;
};
#endif
#ifndef BAR_H
#define BAR_H
#include "Foo.h"
class Bar {
public:
Foo* fooMember;
};
#endif
В этом случае я получаю ошибки, такие как
'class' не называет тип
Подумайте, что в этом случае Foo
является основным классом, который включает в себя множество других классов в качестве членов. Но с одним членом мне нужно иметь двунаправленную связь.
Так почему у меня такие проблемы?
Использовать форвардные объявления:
#ifndef FOO_H
#define FOO_H
class Bar;
class Foo
{
public:
Bar* barMember;
};
#endif
а также:
#ifndef BAR_H
#define BAR_H
class Foo;
class Bar
{
public:
Foo* fooMember;
};
#endif
Вам нужно будет включить соответствующие файлы заголовков в файлы.cpp, содержащие реализации, поэтому не будет взаимных включений.