Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2012, 22:22   #1
dimavit
Пользователь
 
Регистрация: 04.07.2010
Сообщений: 28
По умолчанию Incompatible types Почему?

1. При объявлении класса определяю поле FLife: SmallInt;
2. Там же указываю метод для записи в это поле: function SetLife(AIzm: SmallInt): SmallInt;
3. Там же указываю свойство: property Life: SmallInt read FLife write SetLife;

При компиляции получаю сообщение, что в строке 3 определены Incompatible types. Причем, какие именно types являются Incompatible не указано. Как видно, все типы являются одинаковыми. Если какой-либо из них изменить (допустим на Byte), то это же сообщение указывает уже конкретно, что типы Byte и SmallInt являются несовместимыми и это понятно. Но почему же являются несовместимыми SmallInt и SmallInt? Кстати, если поменять все типы SmallInt на любые другие (например integer, Byte, string, etc), то результат будет тем же - Incompatible types без конкретного указания несовместимых типов. Если функцию заменить процедурой (т.е. тип не указывается) то все нормально.
dimavit вне форума Ответить с цитированием
Старый 28.07.2012, 22:40   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

а разве сеттер что-то возвращает? скорее всего он и определен, как procedure ... вот и ругается на несовместимость
p51x вне форума Ответить с цитированием
Старый 28.07.2012, 22:51   #3
dimavit
Пользователь
 
Регистрация: 04.07.2010
Сообщений: 28
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
а разве сеттер что-то возвращает? скорее всего он и определен, как procedure ... вот и ругается на несовместимость
Ну как же, в п.2 я его объявляю как функцию: function SetLife(AIzm: SmallInt): SmallInt; А потом эту функцию определяю:

Код:
function TBeing.SetLife(AIzm: SmallInt): SmallInt;
begin
  FLife:= FLife - AIzm;
  if FLife<0 Then FLife:=0;
  Result:= FLife;
end;
dimavit вне форума Ответить с цитированием
Старый 28.07.2012, 22:56   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

сеттер не может быть функцией, что не понятно?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.07.2012, 12:13   #5
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

dimavit, неправильно трактуешь сообщение. Сигнатура метода - это тоже тип данных. "Incompatible types" говорит не о SmallInt, а о function SetLife. Сеттер должен иметь вид:
Код:
procedure SetSomething(Value: TSomeType);
или
Код:
procedure SetSomething(const Value: TSomeType);
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятно почему Incompatible types flouwjke Помощь студентам 6 23.04.2012 18:59
Incompatible types MetR Помощь студентам 4 22.12.2011 18:31
incompatible types nupinh Общие вопросы Delphi 1 21.05.2011 23:18
Delphi Incompatible types Iogan Gamba Puti Помощь студентам 1 19.06.2008 13:45