Описание тега forward-declaration

Прямые объявления позволяют статически типизированным программам указывать тип и имя символа без его фактического определения.

Прямые объявления - это то, как можно избежать ссылок на неопределенный символ в статически типизированном языке. Прямые объявления позволяют компилятору знать имя и тип символа без предварительного определения его программой.

Однако форвардные объявления (при объявлении structs и classes) являются неполными, что накладывает особые ограничения на то, что можно и что нельзя делать с заранее объявленным типом.

Например, рассмотрим следующий случай (C++):

class Parent
{
    // ...
    vector<Child> children;
};

class Child
{
    // ...
    Parent *parent;
}; 

Когда компилятор компилирует определение родителя, он находит ссылку на тип Child, который не определен, что приводит к сбою компиляции.


Форвардное заявление устраняет эту проблему:

class Child;
class Parent
{
    // ...
    vector<Child> children;
};


class Child
{
    // ...
    Parent *parent;
}; 

Когда добавляется предварительное объявление, компилятор знает, что будет Child class где-нибудь позже в программе и успешно компилируется.