Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Прототип Класса


Автор: rubenhak 11.2.2006, 14:15
Люди посмотриет следующий код.

Код

type
  B = class;

  A = class
  public
    test : B;
  end;


  B = class
  public
    test : A;
  end;


он работающий, но если я класс B перетаскиваю в другой унит. компилятор ошибку дает.
кто может помочь?

заранее спасибо.

Автор: Yanis 11.2.2006, 14:30
Если ты переносишь из Unit1 описание класса B в Unit2, то в Unit2 у тебя должен быть подключён Unit1 в которм описан класс A. Так ли это в твоём случае?
Добавлено @ 14:31
И неужели так сложно написать ошибку которую выдаёт компилятор? smile

Автор: volvo877 11.2.2006, 14:37
Yanis,
это не тот случай... Тут будет Circullar Unit Reference - для определения типа A нужно определение B, и наоборот...

Автор: rubenhak 11.2.2006, 15:36
ладно, так и быть дословно прокоментируем ошибку smile
volvo, правильно сказал.

volvo - да, но в случае одного фаила - работает,
кто знает как разделить на 2 фаила , чтоб в одном был class A, а во втором class B ?
в этом случае ( в случае разных юнитов ) прототип класса "B = class;" не работает.

Автор: volvo877 11.2.2006, 15:42
Цитата(rubenhak @ 11.2.2006, 14:36 Найти цитируемый пост)
как разделить на 2 фаила

Никак... Если в Type появляется B = class, то значит в этой же секции Type должно быть и определение класса B... У тебя так не получится.

А избежать Circullar Unit Reference можно только , если подключать модули один к другому в разделе Implementation (тогда зацикливание "разруливается" компилятором)... У тебя проблема (при данном подходе) - нерешаема. Опиши свою задачу, возможно есть другой способ, или оставляй эти косвенно-рекурсивные классы в одном модуле...

Автор: rubenhak 11.2.2006, 16:28
да это все я знаю , просто хотелось что-то по красивее smile
а нет каких-то линкерных директив чтоб решить?

Автор: volvo877 11.2.2006, 16:39
А линкер-то тут при чем? У тебя компилятор не пропускает такое, до линкера дело не доходит...

Автор: rubenhak 11.2.2006, 16:48
я имел ввиду кое-какая директива, которая дала бы понять что етот класс есть , но в другом месте.
это же решено в C++....

Автор: Yanis 12.2.2006, 05:09
Цитата(rubenhak @ 11.2.2006, 16:48 Найти цитируемый пост)
я имел ввиду кое-какая директива, которая дала бы понять что етот класс есть , но в другом месте.
это же решено в C++....

Слава богу, что такой директивы нету в Pascal/Delphi.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)