Привет, я уже читал подобные вопросы по этой теме, но я не могу решить свою проблему. Я думаю, что мне нужно сделать предварительную декларацию, поэтому я попробовал следующее.Как разрешить этот цикл включения заголовка?
У меня есть три класса А, В и InterfaceA
Defintion InterfaceA
#ifndef INTERFACE_A_H
#define INTERFACE_A_H
#include "B.h"
namespace Example
{
class B; // Forward declaration?
class InterfaceA
{
Example::B test;
};
}
#endif
Definiton класс А
#ifndef A_H
#define A_H
#include "InterfaceA.h"
namespace Example
{
class A : public Example::InterfaceA
{
};
}
#endif
класс Defintion Б
#ifndef B_H
#define B_H
#include "A.h"
namespace Example
{
class A; // Forward declaration?
class B
{
Example::A test;
};
}
#endif
Основной
#include "A.h"
#include "B.h"
int main()
{
Example::A a;
Example::B b;
}
Я получаю следующее сообщение об ошибке в визуальной студии:
'Example :: B :: тест' использует неопределенный класс 'Пример :: A'
Edit: Спасибо до сих пор, за всякую помощь. Это было очень полезно. Я думаю, моя проблема в том, что у меня был очень плохой дизайн в моем реальном проекте. Я изменю это.
Помимо этого у меня сейчас лучше понять для опережающего описания :-)
Поскольку оба класса 'A' и' B' ссылаются друг на друга * по значению *, нечего делать, кроме как редизайна или путем создания одной (или обеих) ссылок или указателей. –
Если 'A' содержит' B', то 'B' не может содержать' A'. Одна или другая переменная 'test' должна быть указателем или ссылкой, и в этом случае этот тип должен быть объявлен, а не определен. –