[fpc-pascal] Incompatible types: got "SYSTEM.PChar" expected "SYSTEM.PChar"
José Mejuto
joshyfun at gmail.com
Thu Jun 9 00:04:29 CEST 2016
Hello,
I have a lot of constant strings and some array of records that should
be initialized in one field with one of this entries, so I found two
solutions, one is create a symbol for each string, something like:
const
TMyStringSymbol='String one';
But also I need to be able to enumerate all of them at runtime, so I
wrote an array and initialize it at compile time (this also produces
less symbol pollution for the compiler):
const
TMyStrings: array [0..1] of pchar = (
'String One','String Two');
As I need this names in other places I try to create a record and
initialize it at runtime using the pchar of the previous array, and here
is the problem:
-----------------------
program testpossiblebug;
type
TFirstRecord=record
Ident: pchar;
end;
const
TSomePcharArray: array [0..1] of pchar = ( 'pcharONE','pcharTWO');
{$DEFINE THISDONTCOMPILE}
TConstRecord: TFirstRecord = (
{$IFDEF THISDONTCOMPILE}
Ident: TSomePcharArray[1]
{$ELSE}
Ident: @TSomePcharArray[1]
{$ENDIF}
);
var
R: TFirstRecord;
begin
R:=TConstRecord;
{$IFDEF THISDONTCOMPILE}
writeln(R.Ident);
{$ELSE}
writeln(PPchar(R.Ident)^);
{$ENDIF}
end.
------------------------
This does not compile and outputs the funny error in the subject. I
think it should compile as information is static and previously defined,
but if it is indeed an error by my side maybe the error message should
be a bit different :-?
To test the example, define or undefine the "THISDONTCOMPILE", with it
defined it does not compile, without it it compiles and the modified
writeln shows the expected pchar string.
Should I report it ?
--
More information about the fpc-pascal
mailing list