![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по созданию класса [D6, WinXP]
leonidus © (2004-11-02 10:18:00)Задали курсовик по ООП, в принцопе все сделал но столкнулся с формальной проблемой.
Создаю класс:
//начало описания класса
type
TAutomobile=class
Napr_Grad:word; //поле направления движения
Name:string; //поле именя владельца
ID:word; //уникальный идентификатор автомобиля
private
function GetTecV:real;
procedure SetTecV(TecV:real);
public
//для поля TekV по условию надо предложить модификаторы
// доступа, я так предположил это именно GetTekV и SetTekV
property TekV:real read GetTekV write SetTekV;
//описание методов
constructor Create(var command_str:string);
procedure ChangeSpeed(delta:real);
procedure Stop;
end;
Так вот, после компиляции выдается сообщение об ошибке "Cannot assign to a read-only property" с указанием на строку property TekV:real read GetTekV write SetTekV;
Я не понимаю почему это свойство TekV вдруг только для чтения и я его не могу изменить впроцедуре SetTecV?
Знатоки ООП, подсажите пожалуйста.
leonidus (2004-11-03 08:38:00) [1]короче говоря вот это:
function TAutomobile.GetTekV:real;
begin
end;
procedure TAutomobile.SetTekV(TekV:real);
begin
end;
спасло отца русской демократии:)
leonidus (2004-11-03 07:57:00) [2]Ну это конечно теоретическая задача... все таки подскажите как поступить.
Palladin (2004-11-02 17:46:00) [3]хм, действительно, как приятно было бы программировать еслиб все это сводилось лишь к описанию интерфейса...
leonidus (2004-11-02 14:14:00) [4]ну нет конечно, просто я не врубаюсь что от меня хотят в этими модификаторами
TUser (2004-11-02 13:32:00) [5]
> Ну я тут не виноват что ни описания функции GetTekV ни описания процедуры SetTekV в программе нет
LOL. Борланд с Биллом Гейтсом виноваты, наверное
leonidus (2004-11-02 13:10:00) [6]Ну я тут не виноват что ни описания функции GetTekV ни описания процедуры SetTekV в программе нет, по тому что в условии задачи написано "для поля TekV предусмотреть модификаторы доступа". Я вообще-то до конца и не понял что это за модификаторы, но интуитивно показалось что это как раз read и write. Или може надо просто в implementation написать все таки эту функцию и процедуру... но тогда что у них внутри должно быть, какова их функция?
PVOzerski (2004-11-02 11:28:00) [7]Ну уж если ты пишешь, что это функции - изволь довести это обстоятельство до конца. Сам же пишешь: они должны быть. Хотя бы abstract, хотя это совсем чушь по смыслу будет. Либо уж "перевешивай" свойства на переменные.
leonidus (2004-11-02 11:09:00) [8]да нет не забыл, вот код, в нем вообще нет описания ни GetTecV ни SetTecV, они вообще по условию ничего делать не должны - просто быть. Это же учебный пример.
implementation
constructor TAutomobile.Create(var command_str:string);
begin
command_str:=paramstr(1);
end;
procedure TAutomobile.ChangeSpeed(delta:real);
begin
TekV:=TekV+delta;
end;
procedure TAutomobile.Stop;
begin
TekV:=0;
end;
PVOzerski (2004-11-02 11:06:00) [9]Значит, в описании класса исправил, а в implementation забыл.
leonidus (2004-11-02 11:03:00) [10]да, сори на опечатку, это дело я исправил но теперь другая фишка, на строке function GetTekV:real;
пишет "Unsatisfied forward or external declaration" ...
TUser (2004-11-02 10:30:00) [11]Не гони ( :)) - нормально все компилится. И ошибка эта не на таких строках возникает.
PS. А здесь у тебя, кстати, будет - Field or method expected, т.к. Tec и Tek - это разные вещи.
Семен Сорокин (2004-11-02 10:23:00) [12]function GetTe cV:real;
procedure SetTe cV(TecV:real);
public
//для поля TekV по условию надо предложить модификаторы
// доступа, я так предположил это именно GetTekV и SetTekV
property TekV:real read GetTe kV write SetTe kV;
:))