![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Недавно пришлось использовать предварительное описание класса, столкнулся с таким вот подводным камнем:
Код:
type // Предварительное описание TTestClass = class; ... // Здесь описаны другие классы ... // Полное описание TTestClass = class(TObject) ... end; Цитата:
Вот пример кода, вызывающего ошибку: Код:
type // Предварительное описание TTestClass = class; // А вот здесь нам захотелось объявить к.л. переменную var x : integer; type // <-- Уже другая секция type // Полное описание TTestClass = class(TObject) ... end; Пишу это другим на будущее, просто это такая мелочь, вроде бы всё правильно написано - а компилятор ругается. А когда читал справку, не сразу заметил, что данная особенность там описана (т.к. просто смотрел на пример кода )Цитата:
|
|
#2
|
||||
|
||||
|
В любом случае нужно стремиться к не к призвольной структуре кода, а к четкой...т.е. все type вместе, все var вместе и все const вместе...
есть определенные правила которых рекомендуется придерживаться... http://www.infocity.kiev.ua/prog/del...elphi185.phtml |
|
#3
|
||||
|
||||
|
У меня была несколько иная проблема подобного плана...
Есть основной класс (в отдельном юните), и он должен быть доступен в других юнитах. И есть дополнительные классы, которые использует основной. Они должны быть видимы только "на территории" этого юнита. Код:
type
TSomeClass=class; //Предварительное объявление
implementation
type
TSubClass=class
...
end;
TSomeClass=class
...
private
t1: TSubClass;
...
end; |
|
#4
|
||||
|
||||
|
А почему не так???
Код:
unit ... interface uses ... type TSomeClass=class; //Предварительное объявление TSubClass=class//Подкласс ... end; TSomeClass=class//Твой класс ... private t1: TSubClass; end; |
|
#5
|
||||
|
||||
|
Цитата:
|
|
#6
|
||||
|
||||
|
вот определения interface и implementation...
http://www.delphisources.ru/pages/fa...ation.php.html http://www.delphisources.ru/pages/fa...rface.php.html http://www.realcoding.net/article/view/711 Тебе нужно чтобы SubClass был доступен только для SomeClass??? Попробуй SomeClass объявить в interface, а SubClass в implementation.. Последний раз редактировалось NIch, 25.10.2009 в 23:08. |
|
#7
|
||||
|
||||
|
ругается в строчке объявления переменной - не видит сабкласс...
|
|
#8
|
||||
|
||||
|
Код:
type
TSomeClass=class; //У меня ругается тут
implementation
type
TSubClass=class
...
end;
TSomeClass=class
...
private
t1: TSubClass;
...
end;Код:
type TSomeClass=class; Код:
implementation
type
TSomeClass=class; //Предварительное определение в implementation
TSubClass=class
...
end;
TSomeClass=class
...
private
t1: TSubClass;
...
end;Последний раз редактировалось NIch, 26.10.2009 в 18:47. |
|
#9
|
||||
|
||||
|
Читать научись ёмоё!
Цитата:
|
|
#10
|
||||
|
||||
|
Выражай яснее мысли...
Цитата:
Цитата:
Цитата:
Код:
type
TSomeClass=class; //Предварительное объявление
implementation
type
TSubClass=class
...
end;
TSomeClass=class
...
private
t1: TSubClass;
...
end; |
|
#11
|
|||
|
|||
|
Ребят, вы просто не понимаете как устроен dcu.
Если в секции interface ты сказал "А", то уж будь любезен сказать "Б", иначе компилятор не может выдать в другие модули информацию. Это не C++, где хидеры отдельно, а реализация отдельно. Если хочешь таких извращений, то пользуй интерфейсы. |