- Код: Выделить всё
{$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}, тоже ошибок не будет.
Отсюда вопрос приведение класса к интерфейсу, от которого он унаследован некорректно?