IUnknowЯ свой вопрос задавал в двух форумах и не знал, что ты тут тоже бываешь.

Кстати, я столкнулся с еще одной проблемой при решении этого задания:
Цитата
Открыть модуль, не связанный с формой и поместить в него три класса:
Класс Animal, который содержит в разделе public объявление конструктора Create и объявление метода-функции: Verse – звук, издаваемый животным. Тип результата возвращаемого функцией – string. Метод Verse объявить виртуальным и абстрактным. В разделе private класса определить переменную Kind : string.
Класс Dog объявить потомком класса Animal. В разделе public этого класса объявить конструктор и методы Verse и Eat. Метод Eat типа string объявить виртуальным ( пища животного).
Класс Cat объявить потомком класса Animal. Раздел public класса содержит те же определения, что и соответствующий раздел класса Dog.
В реализациях конструктора каждого класса переменной Kind присваивается имя соответствующего животного, напрамир для класса Animal : Kind := ‘An Animal’.
В реализациях методов Verse возвращается звук, издаваемый животным, например Verse := ‘Mieow’.
В реализациях методов Eat возвращается название пищи, которой питается соответствующее животное.
Задать имя модуля и имя проекта, в который этот модуль будет включен.
Добавить в проект форму, которой присвоить имя Animals, также задать имя модулю, связанному с формой.
В форме расположить три кнопки опций ( компонент RadioButton) с названиями Animal, Dog, Cat ; кнопкой команды (компонент Button) с названием Kind и две крупный надписи (компонент Label) . Нажатию одной из кнопок опций будет соответствовать выбор животного. При нажатии кнопки команды надписи должны отобразить звук, издаваемый животным и его пищу.
Определите в классе формы private-переменную MyAnimal.
Запишите код для обработчика события OnCreate формы, где создается объект типа Dog на который ссылается переменная MyAnimal.
В обработчиках события OnClick каждой кнопки опций записать код, который удаляет текущий объект и создает новый.
В обработчике события OnClick кнопки команды записать код, который будет помещать в надписи звук, издаваемый животным и его пищу. Для работы с методом Eat используйте операцию is для приведения типов.
Если вы все сделали правильно, при запуске приложения надписи будут отображать пищу и звук для Dog и Cat и приложение завершит работу по ошибке при выборе Animal.
Уберите ключевое слово abstract в объявлении метода Verse. Запустите приложение снова. Посмотрите что изменилось в работе приложения. Объясните различия.
Попробуйте использовать метод Eat без приведения типов (без is).
Разработайте два класса потомка от Dog или Cat (согласно варианту), которые будут отображать особенности двух пород собак или кошек соответственно. Разработайте методы для этих классов, позволяющие получить некоторые характеристики породы (рост, длина шерсти, длина ушей и т.д.). Дополните форму компонентами позволяющими увидеть все характеристики разработанных классов.
Потомки должны показываться на форме, если пользователь выбирает родителя, и должны быть скрыты, если выбран другой класс.
Проблема возникает на шаге отмеченным жирным шрифтом.
Классы с животными, их конструкторы и методы я сохранил в модуле AnimalsUnit.pas.
Главная форма программы храниться в модуле MainUnit. В ней я подключил модуль с животными:
Код
implementation
uses AnimalsUnit;
Далее в модуле MainUnit пишу:
Код
private { Private declarations }
MyAnimal: TAnimal; // Переменная "Мое животное" от класса "Animal".
public
{ Public declarations }
end;
Компилятор ругается на строку ”MAnimal: TAnimal;” (”[Pascal Error] MainUnit.pas(28): E2003 Undeclared identifier: 'TAnimal'”). И разумеется процедура
Код
procedure TMainForm.FormCreate(Sender: TObject);
begin
MyAnimal:=TDog.Create;
end;
не работает.
Хотя в AnimalsUnit я в самом начале объявил
Код
type
TAnimal = class(TObject)
и подключил модуль ”AnimalsUnit” к "MainUnit". До введения переменной ”MyAnimal” все компилировалось прекрасно.