Учитывая, что вы запрашиваете ссылки между классами, возможно, вы пришли из Java, C# или аналогичного фона, где можно только помещать ссылки на объекты внутри других объектов.
В C++ таких ограничений нет: вам разрешено иметь содержимое одного объекта полностью вложенным внутри другого. Но для этого вы должны заранее указать определение вложенного объекта. C++ нуждается в этом определении, чтобы вычислить размер и расположение внешнего объекта. Чтобы избежать этого гнезда, вам нужно разместить не сам объект, а pointer или reference его внутри внешнего объекта.
Это, как говорится,
// C#
class A
{
int x;
B b;
}
class B
{
int y;
A a;
}
становится
// C++
class B; // tell the compiler that B is a class name
class A
{
int x;
B *pb; // the forward declaration above allows you to declare pointer to B here
};
class B
{
int y;
A *pa;
};
, если вы решите использовать синтаксис указателей.
То, что это позволяет это иметь такие вещи, как:
// C++ again
class C
{
A a;
B b;
A *pa2;
};
, который имеет расположение в памяти в виде:
C: топорa.pb поb.pa PA2
что не возможно в Java/C#.
это действительно очень простой, и я не пытаюсь быть злым, но вы должны понять это с небольшим количеством поисков. –
Да ... Как это сработает? 'A myA; myA.b.a.b.a.b.a.b.a.ba.a.b ... ' – mwerschy
http://en.wikipedia.org/wiki/Forward_declaration –