Недавно пришлось использовать предварительное описание класса, столкнулся с таким вот подводным камнем:
Код:
type
// Предварительное описание
TTestClass = class;
...
// Здесь описаны другие классы
...
// Полное описание
TTestClass = class(TObject)
...
end;
Если написано так, то всё работает, однако, если разнести предварительное описание класса и его полное описание по разным секциям type , то компилятор не видит полного описания и выводит ошибки:
Цитата:
[Error] Unit1.pas(19): Type 'TTestClass' is not yet completely defined
[Error] Unit1.pas(25): Identifier redeclared: 'TTestClass'
|
Вот пример кода, вызывающего ошибку:
Код:
type
// Предварительное описание
TTestClass = class;
// А вот здесь нам захотелось объявить к.л. переменную
var
x : integer;
type // <-- Уже другая секция type
// Полное описание
TTestClass = class(TObject)
...
end;
Пишу это другим на будущее, просто это такая мелочь, вроде бы всё правильно написано - а компилятор ругается. А когда читал справку, не сразу заметил, что данная особенность там описана (т.к. просто смотрел на пример кода

)
Цитата:
A forward declaration must be resolved by a defining declaration of the same class within the same type declaration section.
|