Несколько часов искал ошибку, которую FreePascal вроде должен бы отлавливать: Наследник в переопределении виртуального метода предка делает его статическим. Должен ли компилятор сообщить об этом? Ведь в Паскале вроде нельзя так делать?
--------------------
Лао-Цзы : Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
type TPGObject=^TGObject; TGObject=object v,col:byte; //speed, color l,t:real;//angle, time constructor init(speed,color:byte; angle,time:real); procedure moveto; procedure ChangeDirection; virtual;//abstract; //!!!!!!!!!!!!!!!!!! procedure calculation; virtual; //abstract; function GetFrontPoint:TPoint; virtual;//abstract; function IsInside(P:TPoint):boolean; virtual;//abstract; procedure show; virtual;// abstract; procedure hide; virtual;// abstract; destructor done; virtual; end;
type TPBall=^TBall; TBall=object(TGObject) public pos:TPoint; //pos.x,pos_y:integer; radius:integer;//radius constructor init(x,y:integer; speed,color:byte; angle,time:real; r:byte); procedure ChangeDirection; //!!!!!!!!!!!!!!!!!! procedure calculation; virtual; function GetFrontPoint:TPoint; virtual; function IsInside(P:TPoint):boolean; virtual; procedure show; virtual; procedure hide; virtual; destructor done; virtual; private function distance(P:TPoint):real; end;
Метод ChangeDirection. Совместимость в обоих модулях стоит с TP - через директиву {$Mode Tp}
Сообщение отредактировано: Bokul -
--------------------
Лао-Цзы : Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
Лао-Цзы : Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
По умолчанию все включено... Только при успешной (без Errors) компиляции окно Compiler Message становится Hidden, его надо опять показать... Alt+0 (ноль) Выбираешь CompilerMessages -> Show, и смотришь внимательно на все, что касается Warning и Hints...
Лао-Цзы : Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
По-моему, Messages и CompilerMessages - не одно и то же... Проверь, есть ли в Window -> List именно CompilerMessages... Заодно еще и в Options -> Compiler -> Verbose посмотри, включено ли Warnings/Hints/Notes ...
Ball.pas(11,19) Warning: An inherited method is hidden by "TBall.ChangeDirection(Byte, Double)"
А как это можно понимать?
--------------------
Лао-Цзы : Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
А вот так и понимать - метод предка скрыт методом TBall.ChangeDirection... А раз скрыт - то у тебя сразу должен возникнуть вопрос: а я просил скрывать? Нет, не просил... Значит, что-то не то... Или Override (с классами) или Virtual не поставил...
Спасибо! А можно сделать так, чтобы это окно не исчезало?
--------------------
Лао-Цзы : Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
Вообще-то я сейчас прочитал в User.pdf, что по нажатию F12 появляется окно с сообщениями последней компиляции... Есть смысл его держать всегда на экране?