Generic (TFPGObjectList) EInvalidCast

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Generic (TFPGObjectList) EInvalidCast

vojtech.cihak
Hi,
 
why this code gives EInvalidCast at runtime (but compiles well):w
 
program Project1;
{$mode objfpc}{$H+}
 
uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, fgl
  { you can add units after this };
 
{$R *.res}
type
  TMyClass = class
    procedure Output1;
  end;
 
  TMyList = class (specialize TFPGObjectList<TMyClass>)
 
  end;
 
  TMyDescClass = class(TMyClass)
    procedure Output2;
  end;
 
var MyList: TMyList;
    MyClass: TMyClass;
 
procedure TMyClass.Output1;
begin
  WriteLn('Output1');
end;
 
procedure TMyDescClass.Output2;
begin
  WriteLn('Output2');
end;
 
begin
  MyList:=TMyList.Create(True);
  MyClass:=TMyClass.Create;
  MyList.Add(MyClass);
  MyList[0].Output1;
  TMyDescClass(MyList[0]);  // EInvalidCast
  MyList.Free;
end.
 
Thanks for help,
 
V.
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: Generic (TFPGObjectList) EInvalidCast

vojtech.cihak

I forgot: FreePascal 3.3.1 r.40507

 

V.

______________________________________________________________
> Od: "Vojtěch Čihák" <[hidden email]>
> Komu: "FPC-Pascal users discussions" <[hidden email]>
> Datum: 11.12.2018 22:19
> Předmět: [fpc-pascal] Generic (TFPGObjectList) EInvalidCast
>

Hi,
 
why this code gives EInvalidCast at runtime (but compiles well):w
 
program Project1;
{$mode objfpc}{$H+}
 
uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, fgl
  { you can add units after this };
 
{$R *.res}
type
  TMyClass = class
    procedure Output1;
  end;
 
  TMyList = class (specialize TFPGObjectList<TMyClass>)
 
  end;
 
  TMyDescClass = class(TMyClass)
    procedure Output2;
  end;
 
var MyList: TMyList;
    MyClass: TMyClass;
 
procedure TMyClass.Output1;
begin
  WriteLn('Output1');
end;
 
procedure TMyDescClass.Output2;
begin
  WriteLn('Output2');
end;
 
begin
  MyList:=TMyList.Create(True);
  MyClass:=TMyClass.Create;
  MyList.Add(MyClass);
  MyList[0].Output1;
  TMyDescClass(MyList[0]);  // EInvalidCast
  MyList.Free;
end.
 
Thanks for help,
 
V.
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: Generic (TFPGObjectList) EInvalidCast

vojtech.cihak
In reply to this post by vojtech.cihak

Sorry for noise, this was wrong code and even more it has nothing to do with generics.

I can solve it with class helper.

 

V.

 

______________________________________________________________
> Od: "Vojtěch Čihák" <[hidden email]>
> Komu: "FPC-Pascal users discussions" <[hidden email]>
> Datum: 11.12.2018 22:19
> Předmět: [fpc-pascal] Generic (TFPGObjectList) EInvalidCast
>

Hi,
 
why this code gives EInvalidCast at runtime (but compiles well):w
 
program Project1;
{$mode objfpc}{$H+}
 
uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, fgl
  { you can add units after this };
 
{$R *.res}
type
  TMyClass = class
    procedure Output1;
  end;
 
  TMyList = class (specialize TFPGObjectList<TMyClass>)
 
  end;
 
  TMyDescClass = class(TMyClass)
    procedure Output2;
  end;
 
var MyList: TMyList;
    MyClass: TMyClass;
 
procedure TMyClass.Output1;
begin
  WriteLn('Output1');
end;
 
procedure TMyDescClass.Output2;
begin
  WriteLn('Output2');
end;
 
begin
  MyList:=TMyList.Create(True);
  MyClass:=TMyClass.Create;
  MyList.Add(MyClass);
  MyList[0].Output1;
  TMyDescClass(MyList[0]);  // EInvalidCast
  MyList.Free;
end.
 
Thanks for help,
 
V.
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: Generic (TFPGObjectList) EInvalidCast

Free Pascal - General mailing list
In reply to this post by vojtech.cihak
On Tue, 11 Dec 2018 22:19:11 +0100
Vojtěch Čihák <[hidden email]> wrote:

> Hi,
>  
> why this code gives EInvalidCast at runtime (but compiles well):w
>  
> program Project1;
> {$mode objfpc}{$H+}
>  
> uses
>   {$IFDEF UNIX}{$IFDEF UseCThreads}
>   cthreads,
>   {$ENDIF}{$ENDIF}
>   Classes, fgl
>   { you can add units after this };
>  
> {$R *.res}
> type
>   TMyClass = class
>     procedure Output1;
>   end;
>  
>   TMyList = class (specialize TFPGObjectList<TMyClass>)
>  
>   end;
>  
>   TMyDescClass = class(TMyClass)
>     procedure Output2;
>   end;
>  
> var MyList: TMyList;
>     MyClass: TMyClass;
>  
> procedure TMyClass.Output1;
> begin
>   WriteLn('Output1');
> end;
>  
> procedure TMyDescClass.Output2;
> begin
>   WriteLn('Output2');
> end;
>  
> begin
>   MyList:=TMyList.Create(True);
>   MyClass:=TMyClass.Create;
>   MyList.Add(MyClass);
>   MyList[0].Output1;
>   TMyDescClass(MyList[0]);  // EInvalidCast

because MyClass is not TMyDescClass

Mattias
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: Generic (TFPGObjectList) EInvalidCast

vojtech.cihak
In reply to this post by vojtech.cihak

Yes, I see now, it was my mistake.

 

Thanks.

______________________________________________________________
> Od: "Mattias Gaertner via fpc-pascal" <[hidden email]>
> Komu: [hidden email]
> Datum: 11.12.2018 22:35
> Předmět: Re: [fpc-pascal] Generic (TFPGObjectList) EInvalidCast
>

On Tue, 11 Dec 2018 22:19:11 +0100
Vojtěch Čihák <[hidden email]> wrote:

because MyClass is not TMyDescClass

Mattias
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal