- Код: Выделить всё
- {$Mode objfpc}
 {$OBJECTCHECKS ON}
 {$INTERFACES CORBA}
 Program Simple_interface;
 type
 IMyInterface = Interface
 function MyFunc : String;
 end;
 type
 TMyClass = Class(IMyInterface)
 function MyFunc : String;
 end;
 function TMyClass.MyFunc : String;
 begin
 end;
 var
 obj1 : IMyInterface;
 obj2 : TMyClass;
 ptr : Pointer;
 begin
 obj1 := TMyClass.create();
 obj2 := TMyClass(obj1);
 end.
при компиляции получаем
- Код: Выделить всё
- ppc386 -g -gv -dDEBUG -dGDB interface5.pp
 Compiling Debug Version
 Free Pascal Compiler version 2.2.0 [2007/10/04] for i386
 Copyright (c) 1993-2007 by Florian Klaempfl
 Target OS: Linux for i386
 Compiling interface5.pp
 interface5.pp(17,19) Warning: Function result does not seem to be set
 interface5.pp(28,11) Warning: Class types "IMyInterface" and "TMyClass" are not related
 interface5.pp(28,11) Error: class type expected, but got "IMyInterface"
 interface5.pp(29,4) Fatal: There were 1 errors compiling module, stopping
 Fatal: Compilation aborted
 make: *** [interface5] Ошибка 1
если убрать - obj2 := TMyClass(obj1);
и добавить:
ptr := Pointer(obj1);
obj2 := TMyClass(ptr);
ошибок не будет
ещё если определить {$OBJECTCHECKS OFF}, тоже ошибок не будет.
Отсюда вопрос приведение класса к интерфейсу, от которого он унаследован некорректно?



