Описание тега forward-declaration
Прямые объявления - это то, как можно избежать ссылок на неопределенный символ в статически типизированном языке. Прямые объявления позволяют компилятору знать имя и тип символа без предварительного определения его программой.
Однако форвардные объявления (при объявлении struct
s и class
es) являются неполными, что накладывает особые ограничения на то, что можно и что нельзя делать с заранее объявленным типом.
Например, рассмотрим следующий случай (C++):
class Parent
{
// ...
vector<Child> children;
};
class Child
{
// ...
Parent *parent;
};
Когда компилятор компилирует определение родителя, он находит ссылку на тип Child
, который не определен, что приводит к сбою компиляции.
Форвардное заявление устраняет эту проблему:
class Child;
class Parent
{
// ...
vector<Child> children;
};
class Child
{
// ...
Parent *parent;
};
Когда добавляется предварительное объявление, компилятор знает, что будет Child
class где-нибудь позже в программе и успешно компилируется.