[fpc-pascal] Re: TypInfo Error: type identifier not allowed here

Graeme Geldenhuys graemeg.lists at gmail.com
Fri Oct 27 11:16:43 CEST 2006


Yet if I don't use the GetEnumName inline, it works!?!?

For example, I call GetEnumName and store the result in a string
variable, and then use it in the Check() method.

Oh, and Check() is define as follows;
    class procedure Check(pValue: boolean; pMessage: string = '');


procedure TtiTestCase.CheckObjectState(
  pObjectState: TPerObjectState;
  pData: TtiObject;
  const pMessage: string = '');
var
  objstate: string;
begin
  Assert(pData.TestValid, cTIInvalidObjectError);
  objstate := GetEnumName(TypeInfo(TPerObjectState), Ord(pObjectState));

  Check(pObjectState = pData.ObjectState,
          'ObjectState: Expected <' +
           {$IFDEF FPC}
              {$Note Find out why TypeInfo doesn't work in this case! It can't
                be used directly??? }
           {$ENDIF}
          objstate +
          '> but got <' +
          pData.ObjectStateAsString +
          '> on ' + pData.ClassName + '. ' + pMessage);
end;


Why can I not use GetEnumName inline?

Regards,
  - Graeme -



On 27/10/06, Graeme Geldenhuys <graemeg.lists at gmail.com> wrote:
> Why do I get this error?
> /tiOPF/UnitTests/Common/tiDUnitUtils.pas(231,32) Error: type
> identifier not allowed here
>
> It works on other enumerated declarations, but not on this one.  I am
> pretty sure this code worked before, as I have been using tiOPF under
> FPC since December 2005.  I marked the location of the error with a
> comment in the code below.
>
>
> procedure TtiTestCase.CheckObjectState(
>   pObjectState: TPerObjectState;
>   pData: TtiObject;
>   const pMessage: string = '');
> begin
>   Assert(pData.TestValid, cTIInvalidObjectError);
>   Check(pObjectState = pData.ObjectState,
>           'ObjectState: Expected <' +
>           GetEnumName(TypeInfo(TPerObjectState), Ord(pObjectState)) +
> //  error occurs here               ---^---
>           '> but got <' +
>           pData.ObjectStateAsString +
>           '> on ' + pData.ClassName + '. ' + pMessage);
> end;
>
>
> where TPerObjectState is declared as follows:
>
>   TPerObjectState = (
>                       posEmpty,
>                       posPK,
>                       posCreate,
>                       posUpdate,
>                       posDelete,
>                       posDeleted,
>                       posClean
>                      ) ;
>
>
> I am using FPC 2.1.1 (r4642) under Linux (kernel 2.6) on Intel P4 processor.
>
> Regards,
>   - Graeme -
>
>
> --
> There's no place like 127.0.0.1
>


-- 
There's no place like 127.0.0.1



More information about the fpc-pascal mailing list